2011-07-18 60 views
1

我想根据两个文件创建日期的比较来分叉我的Windows批处理脚本,但我不确定从哪里开始。我觉得一定有办法。有任何想法吗?Windows批处理脚本:比较两个文件的创建日期

更新: 试图解决PA的答案。我将代码片段逐字复制到当前脚本的末尾。然后,我添加脚本中的早期:

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

这给我时,我执行了一个错误: 无效的别名动词。

+0

确定您需要创建日期或修改日期吗? –

+0

实际上,两者都可以工作。 – raddevon

回答

1

在蝙蝠中,您可以使用GET CREATIONDATE动词通过WMIC DATAFILE命令获取文件的创建日期。

您需要将命令的输出捕获到变量中,请参阅HELP FORHELP SET

您可以使用:labelGOTO :eof来创建一个将此功能放在一起的函数。

请注意,对于WMIC DATAFILEWHERE 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

谢谢你的帮助。这将工作与完整的路径?我正在编写登录脚本,并且想将本地计算机上的文件的日期与网络共享上的日期进行比较。我无法得到这个文件的路径。 – raddevon

+0

你有什么试过?哪部分工作?你发现了什么问题?用这些信息编辑你的问题。 –

+0

完成。谢谢。 – raddevon

0

试试这个:

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 
3

你需要把符前面等号逃脱它(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 
相关问题