我想从 powershell 运行一个批处理脚本,在运行之前需要一个环境变量。
这是我尝试过的。
cmd.exe /c SET ENV_BASE_DIR='C:\Program Files\XY\Z 12.3' "&" "C:\Users\Admin\Desktop\file.bat /d /p"
为了避免引用令人头疼的问题,请考虑(暂时)从 PowerShell 设置环境变量,然后直接调用批处理文件:
$env:ENV_BASE_DIR = 'C:\Program Files\XY\Z 12.3'
C:\Users\Admin\Desktop\file.bat /d /p
$env:ENV_BASE_DIR = $null # remove the env. var again.
如果你确实想用
cmd.exe
一行字来解决这个问题:
cmd.exe /c set ENV_BASE_DIR='C:\Program Files\XY\Z 12.3' `& C:\Users\Admin\Desktop\file.bat /d /p
&
元字符更简单地使用 PowerShell 的转义字符 `
(反引号)进行转义。批处理文件路径及其参数作为单独的参数传递。
至于你尝试过的:
最终,命令行的唯一问题是您在
C:\Users\Admin\Desktop\file.bat /d /p
作为一个整体 加上了双引号,这导致 cmd.exe
将整个字符串视为可执行路径。
我用在
powershell
$env:NODE_ENV="development"; yarn run db:migrate up
注意,在这种情况下,在当前终端中,变量将被全局设置,而不仅仅是此命令。如果你打开另一个终端,这个变量将不存在