我想分叉我的Windows批处理脚本基于两个文件的创builddate的比较,我不知道从哪里开始。 我觉得一定有办法。 有任何想法吗?
更新:试图解决PA的答案。 我将代码片段逐字复制到当前脚本的末尾。 然后,我在脚本中提前说过:
IF EXIST "%PROGRAMFILES(X86)%" CALL :getCreationDate "%PROGRAMFILES(X86)%\oracle\jinitiator 1.3.1.28\lib\security\certdb.txt"
当我执行时给了我一个错误:无效的别名动词。
你需要在等号之前加一个脱字号来逃避它(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
在蝙蝠中,您可以使用GET CREATIONDATE
动词,使用WMIC DATAFILE
命令获取文件的创建日期。
您需要将命令的输出捕获到变量中,请参阅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
。
尝试这个:
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*
“获得”的属性可能是…
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