我有一个设置环境变量的批处理脚本 - 它打算运行该东西,然后从那里运行额外的命令。
相反,我只需要打印环境变量的值,而无需更改调用者的环境
我试过了,例如mybat.bat && echo %VAR%
但似乎是
a)该值感染呼叫者和
b)它只有在重复运行时才有效 - 大概是在执行批处理脚本之前与读取VAR的环境有关。
有什么建议吗?
答案 0 :(得分:0)
您需要enabledelayedexpansion
执行cmd /?
,您会看到:
/ V:ON使用!启用延迟环境变量扩展!作为 分隔符。例如,/ V:ON将允许!var!扩大 执行时变量var。 var语法扩展了变量 在输入时,这在FOR内部时是完全不同的 循环。
在批处理中,我们通常会使用此来扩展执行时间。您希望从cmdline运行它,因此需要使用/V:ON
开关启用它,并将%
替换为!
cmd /V:ON mybat.cmd && echo !VAR!
此外,重置.bat
时,.cmd
和errorlevel
文件扩展名之间存在细微差别,但我建议您使用.cmd
扩展程序,因为这个原因至少。
答案 1 :(得分:0)
变量通常设置为正在运行的cmd.exe
会话的本地变量,因此为了不“感染调用者”,您需要在另一个cmd.exe
会话中运行该脚本。
这使用Set
来显示变量和值
Cmd /C "MyBat & Set VAR"
如果您只希望看到可以使用的值Echo
:
...使用延迟扩展:
Cmd /V:On /C "MyBat & Echo(!VAR!"
...使用Call
强行扩展:
Cmd /C "MyBat & Call Echo(%VAR%"
注意要从批处理文件中运行此操作,您需要将 %
字符加倍,即%%VAR%%
。