Пакетный файл проверки обновляется до сегодняшней даты (системная дата)

Я хочу создать пакет, чтобы проверить, был ли файл изменен до сегодняшней даты, что я сделал, чтобы "ввести системную дату и сравнить ее с модифицированной датой, если они совпадают, а затем вызвать что-то. Мой пакетный файл работает хорошо и отображает две правильные даты, но в заявлении 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 не является встроенной командой и может быть недоступна в вашей операционной системе.

Другие вопросы по тегам