Пакетный файл проверки обновляется до сегодняшней даты (системная дата)
Я хочу создать пакет, чтобы проверить, был ли файл изменен до сегодняшней даты, что я сделал, чтобы "ввести системную дату и сравнить ее с модифицированной датой, если они совпадают, а затем вызвать что-то. Мой пакетный файл работает хорошо и отображает две правильные даты, но в заявлении IF о несоответствии даты.
@ECHO OFF
for /f "tokens=1,2,3,4 delims=. " %%i in ('date /t') do set date=%%k%%j
echo %date%
pause
FOR %%a IN (D:\MyFile.txt) DO SET FileDate=%%~ta
set DATEONLY=%FileDate:~0,10%
echo %DATEONLY%
pause
if DATEONLY==date (
echo date ok
)
else (
cls
ECHO Wrong
)
PAUSE
2 ответа
Есть следующие проблемы:
- не используйте имя переменной
date
так как это встроенная переменная, содержащая текущую дату (типset /?
за помощью); - первый
for
утверждение бесполезно, потому что%date%
уже доступен; - струны
DATEONLY
а такжеdate
сравниваются буквально в вашемif
заявление, вы должны заявить%DATEONLY%==%date%
вместо; else
оператор должен быть в той же строке, что и закрывающая скобкаif
телосложениеif /?
за помощью);
Так что попробуйте это:
@ECHO OFF
echo %date%
pause
FOR %%a IN (D:\MyFile.txt) DO SET FileDate=%%~ta
set DATEONLY=%FileDate:~0,10%
echo %DATEONLY%
pause
if %DATEONLY%==%date% (
echo date ok
) else (
ECHO Wrong
)
PAUSE
Примечание. Считайте, что все эти даты в командном файле зависят от локали.
Вот совершенно другой подход:
forfiles /P . /M MyFile.txt /D +0 /C "cmd /C echo @fdate @file"
forfiles
Команда способна проверить дату файла. В приведенной выше командной строке это:
- гуляет по текущему каталогу (
.
), - перечисляет все файлы с именем
MyFile.txt
(конечно, есть только один), - но только если он был изменен
+0
дни после сегодняшнего дня, - а затем выполнил командную строку после
/C
переключатель.
Если MyFile.txt
был изменен сегодня (или даже в будущем), данная командная строка выполняется; если он был изменен ранее, чем сегодня, отображается сообщение об ошибке и ERRORLEVEL
установлен в 1
,
Заметить, что forfiles
не является встроенной командой и может быть недоступна в вашей операционной системе.