CMD/BAT - [решено] Копирование с проверкой

Ответить
Аватара пользователя
safonov_ivan

CMD/BAT - [решено] Копирование с проверкой

Сообщение safonov_ivan »

Всем привет!



У меня есть 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

Re: CMD/BAT - [решено] Копирование с проверкой

Сообщение Iska »

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

Re: CMD/BAT - [решено] Копирование с проверкой

Сообщение Iska »

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




Цитата Iska:



а) для синхронизации удобнее всего пользовать robocopy
CMD/BAT - [решено] Копирование с проверкой




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

Re: CMD/BAT - [решено] Копирование с проверкой

Сообщение Iska »

Цитата safonov_ivan:



Версия в библиотеке не указывается, поэтому сравнение по дате происходит.
CMD/BAT - [решено] Копирование с проверкой




Ясно.




Цитата safonov_ivan:



будет проблемно, парк ОС wniXP, win7, парк не в моей конторе.
CMD/BAT - [решено] Копирование с проверкой




Хреново Изображение.



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


читать дальше »




Код:

Код: Выделить всё

@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
Ответить

Вернуться в «Скриптовые языки администрирования Windows»