批量执行命令和打印变量

时间:2018-04-21 22:54:29

标签: batch-file cmd

我有一个设置环境变量的批处理脚本 - 它打算运行该东西,然后从那里运行额外的命令。
相反,我只需要打印环境变量的值,而无需更改调用者的环境 我试过了,例如mybat.bat && echo %VAR%但似乎是 a)该值感染呼叫者和
b)它只有在重复运行时才有效 - 大概是在执行批处理脚本之前与读取VAR的环境有关。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

您需要enabledelayedexpansion执行cmd /?,您会看到:

  

/ V:ON使用!启用延迟环境变量扩展!作为           分隔符。例如,/ V:ON将允许!var!扩大           执行时变量var。 var语法扩展了变量           在输入时,这在FOR内部时是完全不同的           循环。

在批处理中,我们通常会使用此来扩展执行时间。您希望从cmdline运行它,因此需要使用/V:ON开关启用它,并将%替换为!

cmd /V:ON mybat.cmd && echo !VAR!

此外,重置.bat时,.cmderrorlevel文件扩展名之间存在细微差别,但我建议您使用.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%%