Войти

Показать полную графическую версию : [решено] Как сравнить "дата+время" двух файлов?


Dmitry S.
11-12-2010, 17:15
Необходимо в батнике сравнить "дату+время" изменения файлов так, чтобы, если у первого окажется меньше, то заменить (скопировать с заменой) 2-м файлом. Имена у файлов одинаковые естественно. Подскажите, пожалуйста.

SendMessage
12-12-2010, 10:00
@echo off
set "NewFile=pathfile"
set "OldFile=pathfile"
xcopy /d /q /y "%NewFile%" "%OldFile%"

Dmitry S.
12-12-2010, 13:04
Всё так просто! И чего сам не догадался? :) Спасибо!

Busla
07-10-2011, 10:13
А есть ли простой способ именно узнать, какой из файлов новее?

SendMessage
07-10-2011, 14:00
А есть ли простой способ именно узнать, какой из файлов новее? »
Из 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
А есть ли простой способ именно узнать, какой из файлов новее? »
Еще вариант:

@Echo Off
Dir /TW /B /A-D "Filename1" "Filename2" ... "FilenameN"|FindStr /N $|FindStr ^^1:

SendMessage
07-10-2011, 19:04
El Sanchez, я такой вариант рассматривал самым первым, но, к сожалению, был вынужден отказаться от него. Дело в том, что если файлы расположены в разных папках, то он даст неверную картину.
Сортировка по дате к каждому такому файлу идет независимо. Он единственный обрабатывается в папке и под первым номером всегда будет "Filename1".

El Sanchez
07-10-2011, 20:49
SendMessage, спасибо, все правильно. Будем считать, что мой вариант годится для файлов из одной директории.

kiripanda
07-10-2011, 21:12
@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
kiripanda, надо же - я тоже в конце концов додумался до такого варианта. Но только сегодня. :) @echo off

set "File1=file1"
set "File2=file2"

echo N | xcopy "%File1%" "%File2%" /d/p | find /i "y">nul && echo %File1% || echo %File2%

kiripanda
08-10-2011, 14:10
|| 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

Iska
08-10-2011, 14:48
, то всегда будет выводиться %File2%, что не совсем верно »
А что будет тогда «совсем верным»?




© OSzone.net 2001-2012