当命令保存到环境变量时,PowerShell 会挂起

当命令保存到环境变量时,PowerShell 会挂起

此 Windows 批处理脚本的工作原理:

set MTCH=TOP = .
set REPL=TOP = %ProgramFiles%

powershell -Command "(Get-Content -raw Makefile.msc) -replace '%MTCH%', '%REPL%'" >> Makefile_.msc

这会使 PowerShell 挂起:

set MTCH=TOP = .
set REPL=TOP = %ProgramFiles%

set SCRIPT="(Get-Content -raw Makefile.msc) -replace '%MTCH%', '%REPL%'"
powershell -Command %SCRIPT% >> Makefile_.msc

基本上,我想将 PowerShell 命令设置为变量,然后在 PowerShell 命令中使用此变量。如何修复第二个脚本?

答案1

不要将批处理命令与 Powershell 混合使用。使用其等效的 Powershell。

Powershell 中的变量以 开头$

set MTCH=TOP = .

可以改为:

 $MTCH = "TOP = ."

整个代码可以改为如下所示:

$MTCH = "TOP = ."
$REPL= "TOP = %ProgramFiles%"

$SCRIPT="(Get-Content -raw Makefile.msc) -replace '%MTCH%', '%REPL%'"
powershell -Command $ | out-file Makefile_.msc

答案2

如果您可以在命令变量中包含文件覆盖,它应该可以工作:

set MTCH=TOP = .
set REPL=TOP = %ProgramFiles%

set SCRIPT="(Get-Content -raw Makefile.msc) -replace '%MTCH%', '%REPL%' | Set-Content Makefile_.msc -force"
powershell -Command %SCRIPT%

相关内容