Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Копирование с проверкой (http://forum.oszone.net/showthread.php?t=264577)

safonov_ivan 19-07-2013 09:14 2187047

Копирование с проверкой
 
Всем привет!

У меня есть bat он проверяет файл на сервере, сравнивает с локальным файлом, в случае, если на сервере более свежий файл, то файл копирует на локальную машину, если файл не сервере и клиент один и тот же, то и копирования не происходит. Все работает замечательно, если на локальной машине уже есть файл с которым происходит сравнение. А если файла на локальной машине нету, то в cmd происходит запрос:

Current version
\\name server\name.dll
Что означает C:\Program Files\.....\name.dll:
имя файла или каталога
(F = файл, D = каталог)?


Как избавиться от этого запроса, так чтобы cmd понимала, что у меня это файлы?

set "NewFile=\\name server\name.dll"
set "OldFile=%ProgramFiles(x86)%\........\name.dll"
echo Current version
echo N | xcopy "%NewFile%" "%OldFile%" /d/p | find /i "y">nul && echo %NewFile% || echo %OldFile%
xcopy /d /q /y "%NewFile%" "%OldFile%"

Iska 19-07-2013 09:30 2187054

safonov_ivan, а) для синхронизации удобнее всего пользовать robocopy, б) если в ресурсах библиотеки указана версия — лучше сравнивать по ней.

safonov_ivan 19-07-2013 09:49 2187064

Версия в библиотеке не указывается, поэтому сравнение по дате происходит.

Цитата:

Цитата Iska
а) для синхронизации удобнее всего пользовать robocopy »

будет проблемно, парк ОС wniXP, win7, парк не в моей конторе.

Iska 19-07-2013 10:14 2187075

Цитата:

Цитата safonov_ivan
Версия в библиотеке не указывается, поэтому сравнение по дате происходит. »

Ясно.

Цитата:

Цитата safonov_ivan
будет проблемно, парк ОС wniXP, win7, парк не в моей конторе. »

Хреново ;).


Мне не очень понятна логика Вашего пакетного файла. Я по-прежнему не вижу смысла пользовать даты; необходимо и достаточно сравнивать файлы и копировать при различии, а если целевого файла нет — просто копировать, наподобие:
читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sFileName=0001.txt
set sSourcePath=E:\Песочница\0297\Source
set sDestPath=E:\Песочница\0297\Destination

if exist "%sSourcePath%\%sFileName%" (
        if exist "%sDestPath%\." (
                if exist "%sDestPath%\%sFileName%" (
                        >nul fc.exe /b "%sSourcePath%\%sFileName%" "%sDestPath%\%sFileName%" || >nul copy /y "%sSourcePath%\%sFileName%" "%sDestPath%\%sFileName%"
                ) else (
                        >nul copy "%sSourcePath%\%sFileName%" "%sDestPath%\%sFileName%"
                )
        ) else (
                echo Destination path [%sDestPath%] not found.
        )
) else (
        echo Source file [%sSourcePath%\%sFileName%] not found.
)

endlocal
exit /b 0


safonov_ivan 19-07-2013 11:44 2187135

Спасибо, работает!


Время: 13:31.

Время: 13:31.
© OSzone.net 2001-