0

我正在尝试从运行在虚拟机上的批处理文件访问虚拟机上的用户环境变量。该批处理文件是从主机上的批处理文件调用的,该批处理文件还设置了环境变量。

如果我在虚拟机中打开一个新的命令提示符,那么我可以获得这个变量的值。但是,如果我尝试从从主机上的批处理文件调用的虚拟机上的批处理文件中访问它,我将无法访问它。

主机上的批处理文件:

set BUILD=4732
"C:\Program Files (x86)\VMware\VMware VIX\vmrun" -T ws -gu PostBuild -gp ****** -h https://WIN-M7AT2VUR3HQ:8333/sdk writeVariable "E:\VM Testing\Windows 7.vmx" guestEnv BUILD %BUILD%"

"C:\Program Files (x86)\VMware\VMware VIX\vmrun" -T ws -gu PostBuild -gp ****** -h https://WIN-M7AT2VUR3HQ:8333/sdk runProgramInGuest "E:\VM Testing\Windows 7.vmx" -activeWindow -interactive "C:\Automation\CopylatestbuildAndInstall.bat"

pause

有什么方法可以更改虚拟机上的批处理文件运行的用户帐户吗?这样它就可以访问变量。

4

1 回答 1

0

请注意,当您启动进程(例如命令行处理器)时,环境变量会从父进程复制,并且每个进程都使用自己的环境变量。

Explorer.exe并且可能其他系统进程将系统和用户默认环境变量复制到子进程。

有一种方法可以设置默认系统/用户环境,SETX. 此方法更改默认变量,而不是当前变量。SET更改当前,但不是默认值。

解决您的问题:

在我看来,您的批处理正在编写默认环境。这样您就可以在获得新进程时访问变量。

但它不是设置命令行环境,所以当你继续执行时,你没有新的变量。

要解决此问题,您必须获取当前环境的默认环境变量。

为此,您必须从注册表中获取它:HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment对于系统变量,HKCU\Environment对于用户。

下一个示例将从注册表中读取BUILD默认用户变量并在当前批次中设置它:

FOR /F "SKIP=2 TOKENS=2,*" %i IN ('REG QUERY HKCU\Environment /v BUILD') DO SET BUILD=%%j
于 2013-08-30T08:38:13.457 回答