Пакетный файл Windows для проверки даты изменения файла и вывода в файл журнала, если не указано конкретное значение - PullRequest
4 голосов
/ 08 марта 2011

Мне нужно регистрировать системы, которые не имеют определенного файла в определенной папке и создали пакет ниже, который работает нормально. Он будет вызываться сценарием входа в домен (клиенты - Windows XP в домене AD 2003):

IF EXIST "C:\Documents and Settings\%username%\Application Data\Microsoft\Outlook\test.OTM" (
goto END
) ELSE (
echo %DATE%_%TIME%_%COMPUTERNAME%  >> %LOG1%
)

Однако в дополнение к этому, если файл присутствует, мне нужно проверить, что он имеет конкретную дату изменения, а если нет, вывести его в файл журнала. Пока что я в тупике и буду очень признателен за любые отзывы / помощь по этому вопросу. Спасибо.

Ответы [ 2 ]

7 голосов
/ 09 марта 2011

Вы можете получить информацию о дате и времени изменения файла в пакетном скрипте, но вам нужно запомнить следующие вещи:

  • это сочетание даты и времени;
  • это зависит от локали;
  • это строка .

Это означает, что перед сравнением вам нужно будет отрезать часть времени,который вы должны принять во внимание формат отображения, как указано в региональных настройках системы.И поскольку это строка, вы, вероятно, сможете проверить, является ли она конкретной датой, но не относится ли она к определенному периоду.

И вот как вы можете ее реализовать:

SET filename="C:\Documents and Settings\%username%\Application Data\Microsoft\Outlook\test.OTM"
IF NOT EXIST %filename% GOTO log
FOR %%f IN (%filename%) DO SET filedatetime=%%~tf
IF "%filedatetime:~0,-6%" == "%checkdate%" GOTO END
:log
ECHO %DATE%_%TIME%_%COMPUTERNAME%  >> %LOG1%

В моей системе %%~tf вернет дату и время в формате dd.MM.yyyy hh:mm.Таким образом, часть %filedatetime:~0,-6% следует этому формату и соответственно отсекает часть времени.Возможно, вам придется немного изменить выражение, чтобы оно соответствовало вашему случаю.

И последнее: есть предопределенная переменная с именем USERPROFILE.Он указывает на домашнюю папку активного пользователя, C:\Documents and Settings\<i>username</i>.Таким образом, вы можете уменьшить строку пути до этого: "%USERPROFILE%\Application Data\Microsoft\Outlook\test.OTM".

5 голосов
/ 02 июля 2013

Если дата относится к сегодняшнему дню (например, файл обновлен за последние 7 дней), вы можете использовать команду «forfiles», в которую встроены вычисления даты.

Например: для просмотра всех файлов, которые были изменены за последние 2 дня:

forfiles /D -2 /C "cmd /c ECHO file selected...@path, dated @fdate"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...