1

在我的大学里,我们非常广泛地使用 VMware 来允许在其他被严重锁定的计算机上进行管理任务的实验。我在家里使用相同的虚拟机,所以我不必担心我的本地 PC 的杂乱环境,只需将它复制到我的 USB 闪存驱动器或从我的 USB 闪存驱动器复制它。

我使用的虚拟机是带有我喜欢的所有设置的快照,并设置为在关机时恢复为快照,因此理想情况下它永远不会改变。当我使用多台计算机时,我有一个脚本来检查 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"

我的问题是这个;有时我会更改虚拟机并更新快照。

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

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

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

4

1 回答 1

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 提示以允许您跳过插入驱动器。

注意。它在 VBScript 和 PowerShell 中都容易得多。

于 2014-03-20T06:11:02.587 回答