此 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%