Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Как сравнить "дата+время" двух файлов? (http://forum.oszone.net/showthread.php?t=193655)

Dmitry S. 11-12-2010 17:15 1563336

Как сравнить "дата+время" двух файлов?
 
Необходимо в батнике сравнить "дату+время" изменения файлов так, чтобы, если у первого окажется меньше, то заменить (скопировать с заменой) 2-м файлом. Имена у файлов одинаковые естественно. Подскажите, пожалуйста.

SendMessage 12-12-2010 10:00 1563808

Код:

@echo off
set "NewFile=pathfile"
set "OldFile=pathfile"
xcopy /d /q /y "%NewFile%" "%OldFile%"


Dmitry S. 12-12-2010 13:04 1563923

Всё так просто! И чего сам не догадался? :) Спасибо!

Busla 07-10-2011 10:13 1767860

А есть ли простой способ именно узнать, какой из файлов новее?

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, спасибо, все правильно. Будем считать, что мой вариант годится для файлов из одной директории.

kiripanda 07-10-2011 21:12 1768311

Код:

@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%


kiripanda 08-10-2011 14:10 1768668

Цитата:

Цитата SendMessage
|| 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 1768687

Цитата:

Цитата kiripanda
, то всегда будет выводиться %File2%, что не совсем верно »

А что будет тогда «совсем верным»?


Время: 00:00.

Время: 00:00.
© OSzone.net 2001-