从命令提示符比较文件创建日期

时间:2014-03-20 04:19:40

标签: batch-file robocopy date-comparison

在我的大学,我们非常广泛地使用VMware来允许在其他严重锁定的计算机上试验管理任务。我在家里使用相同的VM,所以我不必担心我的原生PC的混乱环境,通过将其复制到我的USB闪存驱动器和从我的USB闪存驱动器复制。

我使用的VM使用我喜欢的所有设置进行快照,并设置为在关闭时恢复为快照,因此理想情况下它永远不会更改。当我使用多台计算机时,我有一个脚本可以检查VM是否存在,如果没有,则复制它并在下次登录时安排自动打开。

我当前的脚本如下所示:

@echo off

if exist "C:\Users\[Username]\Desktop\Win7x86\Win7x86.vmx" goto open
if not exist "C:\Users\[Username]\Desktop\Win7x86\Win7x86.vmx" echo VM files not found, preparing to copy from USB
goto usb

:usb
if exist "F:" goto copy
if not exist "F:" echo Please insert USB drive.
pause
goto usb

:copy
robocopy "F:\Virtual Machines\Win7x86" "C:\Users\[Username]\Desktop\Win7x86" /mir /eta
schtasks /create /ru [Username] /rp [Password] /xml "%cd%\Win7x86 Opener.xml" /tn "Win7x86 Opener"
goto open

:open
PATH "%PROGRAMFILES%\VMware\VMware Workstation\"
START vmware.exe -x "C:\Users\[Username]\Desktop\Win7x86\Win7x86.vmx"

我的问题是这个;有时我会更改VM,并更新快照。

我希望我的脚本将源文件(USB)的创建日期与本地文件(桌面)进行比较。如果本地更新,那么显然它是自上次更新后被复制并且可以运行,但如果源文件较新,则本地需要更新。

我打算使用vmware.log作为比较文件,因为它很小并且保留了它的创建日期(某些VM文件在VM运行过程中被删除并重新创建)。

我已经浏览了互联网,我找到了最好的比较日期并列出了最新的;但由于我的批处理脚本知识非常有限,我不知道如何从该输出中管出robocopy命令。

1 个答案:

答案 0 :(得分:0)

这应该这样做。

@echo off

for /f "tokens=* usebackq" %%d in (`wmic datafile where Name^="C:\\Users\\[Username]\\Desktop\\Win7x86\\vmware.log" get creationdate ^| findstr ^"[0-9]^"`) do ( set tmpd=%%d )
set vmlocaldate=%tmpd:~0,8%

for /f "tokens=* usebackq" %%d in (`wmic datafile where Name^="F:\\Virtual Machines\\Win7x86\\vmware.log" get creationdate ^| findstr ^"[0-9]^"`) do ( set tmpd=%%d )
set vmusbdate=%tmpd:~0,8%

if %vmusbdate% gtr %vmlocaldate% goto copy

我不知道这将如何适合您的脚本,因为它需要插入USB驱动器;此时您可以启动它,它将立即打开本地虚拟机(如果存在),您必须决定是否总是需要插入USB驱动器并检查创建日期,如果您只想检查何时是USB恰好存在,或者更改USB提示以允许您跳过插入驱动器。

NB。它在VBScript和PowerShell中都要容易得多。