我正在努力让CMD等同于以下bash
功能:
$ FOO=foo.bar
$ BAR=bar
$ BAZ=baz
$ echo ${FOO/$BAR/$BAZ}
foo.baz
现在,当模式和替换都是时,CMD有一些类似的命令替换 常数:
C:\>set FOO=foo.bar
C:\>set BAR=bar
C:\>set BAZ=baz
C:\>echo %FOO:bar=baz%
foo.baz
但是,我似乎无法在那里引用变量 -
C:\>echo %FOO:%BAR%=%BAZ%%
%foo:bar=baz%
我该怎么做?用于指出可在批处理文件中的FOR
循环内工作的内容的加分点。
答案 0 :(得分:4)
以下(批处理文件)应该可以工作并打印“foo.baz”:
setlocal enabledelayedexpansion
set FOO=foo.bar
set BAR=bar
set BAZ=baz
echo !FOO:%BAR%:%BAZ%!
(关于你提到的FOR-loop事情,你需要提供更多关于你究竟是什么意思的信息。)
答案 1 :(得分:2)
从命令行:
call echo %FOO:%bar%=%baz%%
批处理和循环:
@echo off
set FOO=foo.bar
set BAR=bar
set BAZ=baz
for %%N in (baz ban bak) do (
set BAZ=%%N_AndSomething
call :expand
)
goto :eof
:expand
call echo %%FOO:%BAR%=%BAZ%%%
goto :eof
你可以通过使用延迟扩展而不是第二次调用来优化它(调用很昂贵),但是已经显示了,所以我把它作为语法的一个例子。如果您不需要在for
块中设置替换使用的变量,则可以进一步简化它。