在我的大学,我们非常广泛地使用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命令。
答案 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中都要容易得多。