我要使用以下命令
powershell -command "get-content %CONFIG_FILE% | %{$_ -replace \"APP_PATH=.+\",\"APP_PATH=%APP_DIR%\"}"
,但使用批处理脚本
对%CONFIG_FILE%和%APP_DIR%进行了评估set CONFIG_FILE=C:\B0_GW.cfg
set APP_DIR=C:\dbg\kernel
当我这样做时,我目前遇到以下问题:
该字符串缺少终止符:“。
+ CategoryInfo:ParserError:(:) [],ParentContainsErrorRecordException
+ FullyQualifiedErrorId:TerminatorExpectedAtEndOfString
有什么想法吗?
答案 0 :(得分:1)
aschipfl在对该问题的评论中提供了关键指针:
在批处理文件 [1] 中,您必须转义 %
个字符,< em>以%%
的身份通过到达目标应用。
否则,cmd
将%
解释为环境变量引用的开始或结束(部分原因是设计在您的环境中命令;例如%CONFIG_FILE%
)。
(您已经正确地将命令中嵌入"
字符的嵌入\"
。对于PowerShell,%
)。
具体来说,命令%{...}
部分中的%
需要转义(ForEach-Object
是powershell -command "get-content %CONFIG_FILE% | %% {$_ -replace \"APP_PATH=.+\",\"APP_PATH=%APP_DIR%\"}"
cmdlet的PowerShell内置别名):
ForEach-Object
或者,只需使用cmdlet的实际名称powershell -command "get-content %CONFIG_FILE% | ForEach-Object {$_ -replace \"APP_PATH=.+\",\"APP_PATH=%APP_DIR%\"}"
,就可以避免转义:
cmd.exe
[1]不幸的是,{{1}}的命令提示符(在交互式会话中)的行为不同-请参见this answer。 < / p>