Чтобы упростить свой вопрос (насколько я понимаю), вы хотите:
- Посмотрите на исходный каталог и получите последний файл
- Посмотрите на каталог назначения и получите последний файл
- сравнить отметки времени этих двух файлов
- Если исходный файл каталога (шаг 1) новее, чем файл каталога назначения (шаг 2), скопируйте его в каталог назначения.
- Если скопировано, переименуйте новый файл в целевом каталоге.
Шаги 1 и 2 можно выполнить с помощью цикла for:
set SOURCE_SERVER=\\server\source
set DEST_SERVER=C:\Destination Folder
set SOURCE_LATEST=
set DEST_LATEST=
REM Latest timestamp in the source directory
for /f "tokens=*" %%A in ('dir "%SOURCE_SERVER%\*.*" /b /o:-d') do (
if not defined SOURCE_LATEST set SOURCE_LATEST=%%~fA)
REM latest timestamp in the destination directory
for /f "tokens=*" %%A in ('dir "%DEST_SERVER%\*.*" /b /o:-d') do (
if not defined DEST_LATEST set DEST_LATEST=%%~fA)
Подробнее об этом здесь: Как мне написать пакетный скрипт Windows для копирования самого нового файла из каталога?
Шаг 3: Теперь вы знаете последний файл в каждом месте. Время сравнить их метки времени, чтобы увидеть, какой файл новее. Мы можем использовать wmic для получения метки времени для каждого файла, который можно сравнить с реляционными операторами: например, 20150129113038 (что соответствует 29 января 2015 года в 11:30:38) больше, чем 20150129112533 (29 января 2015 года в 11:25:33).
set DEST_FILE_DATE=
set SOURCE_FILE_DATE=
for /f "tokens=1 skip=1 delims=." %%A in ('wmic datafile where name^="%SOURCE_LATEST:\=\\%" get "Last Modified"') do (
if not defined SOURCE_FILE_DATE set SOURCE_FILE_DATE=%%A)
for /f "tokens=1 skip=1 delims=." %%A in ('wmic datafile where name^="%DEST_LATEST:\=\\%" get "Last Modified"') do (
if not defined DEST_FILE_DATE set DEST_FILE_DATE=%%A)
Дополнительные идеи относительно этого последнего сравнения можно найти здесь: Как сравнить временные метки файлов в пакетном скрипте DOS?
Шаги 4 и 5. Наконец, определите, является ли последний файл файлом на исходном сервере, и при необходимости скопируйте + переименуйте.
if "%SOURCE_FILE_DATE%" gtr "%DEST_FILE_DATE%" (
REM copy the source file to the destination and rename it as desired.
copy "%SOURCE_LATEST%" "%DEST_SERVER%\new file name.ext"
) else (
REM Wait 5 minutes and try again
timeout /T 300
goto :START
)