Как сравнить "дата+время" двух файлов?
Необходимо в батнике сравнить "дату+время" изменения файлов так, чтобы, если у первого окажется меньше, то заменить (скопировать с заменой) 2-м файлом. Имена у файлов одинаковые естественно. Подскажите, пожалуйста.
|
SendMessage |
12-12-2010 10:00 1563808 |
Код:
@echo off
set "NewFile=pathfile"
set "OldFile=pathfile"
xcopy /d /q /y "%NewFile%" "%OldFile%"
|
Всё так просто! И чего сам не догадался? :) Спасибо!
|
А есть ли простой способ именно узнать, какой из файлов новее?
|
SendMessage |
07-10-2011 14:00 1768006 |
Цитата:
Цитата Busla
А есть ли простой способ именно узнать, какой из файлов новее? »
|
Из 2-х? Я такие пути увидал:
Код:
set "OneFile=file1"
set "TwoFile=file2"
call:CompareDate "%OneFile%" "%TwoFile%" & goto next
:CompareDate
set "d1=%~t1"
set "d1=%d1:~6,4%%d1:~3,2%%d1:~0,2%%d1:~-5,2%.%d1:~-2%"
set "d2=%~t2"
set "d2=%d2:~6,4%%d2:~3,2%%d2:~0,2%%d2:~-5,2%.%d2:~-2%"
if %d1% gtr %d2% (echo %OneFile%) else echo %TwoFile%
:next
Или так еще можно (не зависит от нац. настроек):
Код:
setlocal enabledelayedexpansion
set "OneFile=file1"
set "TwoFile=file2"
for /f "skip=1 tokens=1 delims=." %%a in (
'wmic datafile where "name="%OneFile:\=\\%" or name="%TwoFile:\=\\%"" get lastmodified'
) do set "d1=!d2!" & set "d2=%%a"
if %d1:~0,10%.%d1:~-4% gtr %d2:~0,10%.%d2:~-4% (echo %OneFile%) else echo %TwoFile%
|
El Sanchez |
07-10-2011 14:25 1768020 |
Цитата:
Цитата Busla
А есть ли простой способ именно узнать, какой из файлов новее? »
|
Еще вариант:
Код:
@Echo Off
Dir /TW /B /A-D "Filename1" "Filename2" ... "FilenameN"|FindStr /N $|FindStr ^^1:
|
SendMessage |
07-10-2011 19:04 1768225 |
El Sanchez, я такой вариант рассматривал самым первым, но, к сожалению, был вынужден отказаться от него. Дело в том, что если файлы расположены в разных папках, то он даст неверную картину.
Сортировка по дате к каждому такому файлу идет независимо. Он единственный обрабатывается в папке и под первым номером всегда будет "Filename1".
|
El Sanchez |
07-10-2011 20:49 1768294 |
SendMessage, спасибо, все правильно. Будем считать, что мой вариант годится для файлов из одной директории.
|
Код:
@echo off
call :new Filename1 Filename2
call :new Filename2 Filename1
goto :eof
:new
echo:n|xcopy %1 %2 /dl|findstr ?>nul&&echo:%1 новее %2
goto :eof
|
SendMessage |
08-10-2011 13:47 1768655 |
kiripanda, надо же - я тоже в конце концов додумался до такого варианта. Но только сегодня. :)
читать дальше »
Код:
@echo off
set "File1=file1"
set "File2=file2"
echo N | xcopy "%File1%" "%File2%" /d/p | find /i "y">nul && echo %File1% || echo %File2%
|
если файлы имеют одинаковое время (напр, абсолютные копии), то всегда будет выводиться %File2%, что не совсем верно
Код:
@echo off
call :new "file1" "file2"
goto :eof
:new
echo:n|xcopy %1 %2 /dp|find "?">nul&&(echo:%1 новее &goto :eof)
echo:n|xcopy %2 %1 /dp|find "?">nul&&(echo:%2 новее &goto :eof)
echo:%1 и %2 имеют одинаковое время
goto :eof
|
Цитата:
Цитата kiripanda
, то всегда будет выводиться %File2%, что не совсем верно »
|
А что будет тогда «совсем верным»?
|
Время: 00:00.
© OSzone.net 2001-