AntoshAReal

Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Приветствую! Прошу помочь со скриптом, который сравнивает 2 файла в разных каталогах по дате изменения и совершает необходимые действия. Вроде всё делает как надо, цикл работает (проверял при наличии двух разноимённых и с разным временем изменения файлов в каталогах), но выполняется три раза вместо двух и третий раз сравнение выполняется неправильно, уже несколько дней ковыряю, не могу сообразить где ошибка. Разобрался, вот рабочий скрипт. Код: @echo off rem http://www.dostips.com/forum/viewtopic.php?t=6063 cd "%~dp0" setlocal enableextensions enabledelayedexpansion for %%a in ("C:\letsencrypt-win-simple\cert\crt\*.pfx") do ( set filename=%%~na.pfx REM echo filenames: "!filename!" set afile=C:\letsencrypt-win-simple\cert\crt\!filename! set bfile=C:\DFSRoots\dfs\nps\cert\!filename! call :FileModTime !afile! A call :FileModTime !bfile! B set diff=0 if defined A if defined B set /a diff=B-A if !A! gtr !B! if !diff! lss -2 call :anewer if !B! gtr !A! if !diff! gtr 2 call :bnewer if !diff! leq 2 if !diff! geq -2 call :equally ) exit /b 0 :anewer echo "file !filename! A newer - C:\letsencrypt-win-simple\cert\crt" endlocal exit /b 0 :bnewer echo "file !filename! B newer - C:\DFSRoots\dfs\nps\cert" endlocal exit /b 0 :equally echo "files timestamp is identical or in tolerance (2 seconds)" endlocal exit /b 0 :FileModTime File [TimeVar] :: :: Computes the Unix time (epoch time) for the last modified timestamp for File. :: The result is an empty string if the file does not exist. Stores the result :: in TimeVar, or prints the result if TimeVar is not specified. :: :: Unix time = number of seconds since midnight, January 1, 1970 GMT :: setlocal disableDelayedExpansion :: Get full path of file for %%F in ("%~1") do set "file=%%~fF" :: Get last modified time in YYYYMMDDHHMMSS format set "time=" for /f "skip=1 delims=,. tokens=2" %%A in ( 'wmic datafile where "name='%file:\=\\%'" get lastModified /format:csv 2^>nul' ) do set "ts=%%A" set "ts=%ts%" :: Convert time to Unix time (aka epoch time) if defined ts ( set /a "yy=10000%ts:~0,4% %% 10000, mm=100%ts:~4,2% %% 100, dd=100%ts:~6,2% %% 100" set /a "dd=dd-2472663+1461*(yy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yy+4900+(mm-14)/12)/100)/4" set /a "ss=(((1%ts:~8,2%*60)+1%ts:~10,2%)*60)+1%ts:~12,2%-366100-%ts:~21,1%((1%ts:~22,3%*60)-60000)" set /a "ts=ss+dd*86400" ) :: Return the result endlocal & if "%~2" neq "" (set "%~2=%ts%") else echo(%ts%) |
| Всего записей: 305 | Зарегистр. 31-08-2005 | Отправлено: 07:20 03-11-2017 | Исправлено: AntoshAReal, 12:48 15-11-2017 |
|