我正在尝试从运行在其上的批处理文件中访问虚拟机上的用户环境变量。从主机上的批处理文件调用此批处理文件,该文件也设置环境变量。
如果我在虚拟机中打开一个新的命令提示符,那么我可以获得该变量的值。但是,如果我尝试从主机上的批处理文件调用的虚拟机上的批处理文件中访问它,我就无法访问它。
主机上的批处理文件:
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
是否有某种方法可以更改虚拟机上的批处理文件正在运行的用户帐户?这样它就可以访问变量。
答案 0 :(得分: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