Пакетный сценарий Windows: сравните даты создания двух файлов - PullRequest
1 голос
/ 18 июля 2011

Я хотел бы раскошелиться на мой пакетный скрипт Windows на основе сравнения дат создания двух файлов, и я не уверен, с чего начать. Я чувствую, что должен быть способ. Есть идеи?

UPDATE: Пробовал решение в ответе ПА. Я скопировал фрагмент кода дословно в конец моего текущего сценария. Затем я добавил это в начале сценария:

IF EXIST "%PROGRAMFILES(X86)%" CALL :getCreationDate "%PROGRAMFILES(X86)%\oracle\jinitiator 1.3.1.28\lib\security\certdb.txt"

, который выдает ошибку при выполнении: Неверный псевдоним глагола.

Ответы [ 3 ]

3 голосов
/ 14 сентября 2012

Вам нужно поставить каркас перед знаком равенства, чтобы избежать его (cmd.exe ооочень замечательный).Я проверил это работает:

setlocal enableextensions enabledelayedexpansion
call :getCreationDate "C:\Windows\Notepad.exe"
echo Creation Date is: %creationdate%
endlocal
goto :EOF
:getCreationDate
set FILE=%~f1
set FILE=%FILE:\=\\%
for /F "skip=1 tokens=* usebackq" %%A in (`wmic datafile where name^="%FILE%" get creationdate`) do (
    set creationdate=%%A
)
goto :EOF
2 голосов
/ 18 июля 2011

В летучей мыши вы можете получить дату создания файла с помощью команды WMIC DATAFILE, используя глагол GET CREATIONDATE.

Вам необходимо записать вывод команды в переменную, см. HELP FOR и HELP SET.

Вы можете использовать :label и GOTO :eof для создания функции, объединяющей эту функцию.

Обратите внимание, что для WMIC DATAFILE предложение WHERE NAME= требует полностью указанного имени файла. См. HELP CALL и модификатор %~f.

Обратите внимание, что WMIC DATAFILE WHERE NAME= требует удвоения обратной косой черты в имени файла. См. HELP SET и синтаксис % : = % для замены одиночной обратной косой черты на двойную обратную косую черту.

как то так .....

:getCreationDate
set FILE=%~f1
set FILE=%FILE:\=\\%
FOR /F "skip=1 tokens=* usebackq" %%A IN (`wmic datafile where name="%FILE%" get creationdate`) DO (
  SET CREATIONDATE=%%A
)
goto :eof

Вам нужно будет использовать CALL :label для его вызова.

CALL :getCreationDate myfile.txt

Вам нужно будет извлечь часть даты и времени, которую вы интересуетесь вычислением. См. HELP SET с использованием модификатора ~.

Наконец, вам нужно сравнить возвращенные файлы дат. См HELP IF.

0 голосов
/ 28 июля 2011

попробуйте это:

wmic datafile where name='c:\\users\\ovadia\\test\\addx.txt'     get 'LAST MODIFIED' > dateofNEWadd.txt

wmic datafile where name='c:\\users\\ovadia\\test\\prevaddx.txt' get 'LAST MODIFIED' > dateofOLDadd.txt

fc /LB1 dateofNEWadd.txt dateofOLDadd.txt

if errorlevel 1 echo "fc err not 0" 

del dateof*

атрибуты для 'get' могут быть ...

Access Rights,
Caption,
Class Name,
Compressed,
Compression Method,
Computer System Class Name,
Computer System Name,
Creation Date,
Current File Open Count,
Description,
Drive,
Eight Dot Three File Name,
Encrypted,
Encryption Method,
File Extension,
File Name,
File System Class Name,
File System Name,
File Type,
Hidden,
Install Date,
Last Accessed,
Last Modified,
Manufacturer,
Name,
Path,
Readable,
Should Be Archived,
Size,
Status,
System File,
Version,
Writeable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...