问题中的错误消息是由于 windowscmd
将命令与sed 命令拆分|
并添加右括号。)
cmd
等效于“命令替换”for /f
后跟单引号之间的命令,管道必须用^
for /f %x in ('echo "Modules/ASR/branches/1.9" ^| sed -e "s|Modules/||" ') do @echo "c:\Sources\"%~x
或者在脚本中使用时,百分比必须加倍
for /f %%x in ('echo "Modules/ASR/branches/1.9" ^| sed -e "s|Modules/||" ') do @echo "c:\Sources\"%%~x
否则扩展允许替换模式%var:pat=repl%
set mypath=Modules/ASR/branches/1.9
echo "c:\Sources\"%mypath:Modules/=%
相当于 bash
echo 'c:\Sources\'"$(echo "Modules/ASR/branches/1.9" | sed -e "s|Modules/||")"
也为了避免启动新进程,这可以通过变量扩展#
来删除最短前缀来完成。
mypath="Modules/ASR/branches/1.9"
echo 'c:\Sources\'"${mypath//Modules\/}"