Войти

Показать полную графическую версию : [решено] Копирование с проверкой


safonov_ivan
19-07-2013, 09:14
Всем привет!

У меня есть 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
safonov_ivan, а) для синхронизации удобнее всего пользовать robocopy, б) если в ресурсах библиотеки указана версия — лучше сравнивать по ней.

safonov_ivan
19-07-2013, 09:49
Версия в библиотеке не указывается, поэтому сравнение по дате происходит.

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

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

Iska
19-07-2013, 10:14
Версия в библиотеке не указывается, поэтому сравнение по дате происходит. »
Ясно.

будет проблемно, парк ОС 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
Спасибо, работает!




© OSzone.net 2001-2012