【发布时间】:2018-09-06 18:32:35
【问题描述】:
让我们考虑以下 perl 脚本:
#!/usr/bin/perl
system("C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/Common7/Tools/VsDevCmd.bat");
system("msbuild");
第一个system调用调用的批处理文件应该设置一些环境变量,以便在第二个system调用中可以找到msbuild可执行文件。
当我运行这个 perl 脚本时,我收到以下错误:
'msbuild' 未被识别为内部或外部命令, 可运行的程序或批处理文件。
所以看起来批处理文件中设置的环境变量不适用于 perl 脚本的上下文。我可以做些什么来完成这项工作?
注 1
首先从控制台窗口运行批处理文件,然后运行msbuild 工作正常。所以批处理文件按预期工作并且 msbuild 实际上是可用的。
注2
我在现实世界中的 perl 脚本要长得多。这里的这个例子是一个允许重现问题的大规模简化。因此,例如,我不能轻易地将 perl 脚本替换为批处理文件。
注3
有趣的是:我已经使用这个 perl 脚本一两年了,没有任何问题。然后突然停止工作。
【问题讨论】:
-
第一个命令(路径中有空格)实际上运行正确吗?例如,请参阅my answer to Execute Windows command with spaces in Perl。
-
是的,第一个命令似乎运行良好。我可以看到该批处理文件向控制台打印了一些横幅。
-
您创建一个shell,执行一个批处理文件,该文件执行诸如更改该进程的环境之类的操作,然后退出您更改的进程。您需要以某种方式在同一个 shell 中执行这两个命令。
-
我将如何在 perl 脚本中做到这一点?
标签: perl batch-file console environment-variables command-prompt