如何在Powershell中通过指定自定义.cmd环境调用执行批处理文件?
解决方案
错误原因说明
- 你调用的
Invoke-Command是用于远程命令执行的cmdlet,本地执行根本不需要使用,参数传递规则不匹配自然会触发前两种报错。 - 你存储的
$executorPath是开始菜单里的快捷方式(.lnk文件),不是可执行程序或批处理文件,直接当程序调用会触发后两类报错,这个快捷方式实际指向的是VS自带的VC环境变量加载脚本vcvars64.bat。 - msbuild的执行环境依赖vcvars脚本加载的临时环境变量,必须保证vcvars脚本和你的BUILD.bat在同一个命令行进程内执行,不然环境变量不生效。
正确执行代码
首先解析快捷方式拿到实际的vcvars脚本路径,再通过cmd执行:
# 解析开始菜单快捷方式的实际目标路径 $wshell = New-Object -ComObject WScript.Shell $shortcut = $wshell.CreateShortcut($executorPath) $vcVarsPath = $shortcut.TargetPath # 加载VC环境后执行BUILD.bat cmd.exe /c "`"$vcVarsPath`" && `"$PWD\BUILD.bat`""
更稳定的替代方案
直接读取VS默认路径下的vcvars64.bat即可,不需要依赖开始菜单的快捷方式,避免快捷方式被修改/删除导致执行失败,VS2019 Community版本的默认路径如下:
$vcVarsPath = "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" cmd.exe /c "`"$vcVarsPath`" && `"$PWD\BUILD.bat`""
内容的提问来源于stack exchange,提问作者martorad
相关产品推荐
相关产品推荐

