2015-07-20 4 views
0

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

Есть следующие проблемы:..

  • do не используйте имя переменной 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 

Примечание: Regard, что все эти даты в пакетном файле являются Локальнозависимыми.

+0

так что же ваш формат даты, когда вы вводите 'date/T' в командной строке? это то же самое, что и для 'echo% Date%'? это должно быть ... и каков формат вашего значения «echo% FileDate%»? это тоже одно и то же (игнорируя временную часть)? – aschipfl

+0

date/T is 07/29/2015, также как% date% – hben

+0

echo% FileDate% value is 07/29/2015 11:20 AM – hben

0

Здесь совершенно другой подход:

forfiles /P . /M MyFile.txt /D +0 /C "cmd /C echo @fdate @file" 

forfiles Команда может проверять дату файла. В приведенной выше командной строке, это:

  • прогулки по текущему каталогу (.)
  • перечислены все файлы с именем MyFile.txt (конечно есть OnlyOne),
  • , но только если он был изменен +0 дней после сегодняшнего дня,
  • , а затем выполнил командную строку после переключателя /C.

Если MyFile.txt был изменен сегодня (или даже в будущем), выполняется данная командная строка; , если он был изменен ранее, чем сегодня, отображается сообщение об ошибке, а ERRORLEVEL установлено на 1.

Обратите внимание, что forfiles не является встроенной командой и может быть недоступен в вашей операционной системе.

+0

Я бы добавил это к вашему другому ответу, вместо того, чтобы сделать новый ответ лично. – SomethingDark

+0

@SomethingDark, я тоже об этом думал, но я нашел, что этот ответ слишком отличается, поскольку он даже не использует код исходного вопроса. Я искал Справочный центр, чтобы найти оптимальную практику для таких ситуаций, но безуспешно. Может быть, есть еще несколько мнений? – aschipfl

+0

Еще раз спасибо! Я только что опубликовал новый вопрос, связанный с этим, надеюсь, вы тоже сможете помочь. – hben