CMDvariables替代参数

我正在试图获得以下bashfunction的CMD等价物:

 $ FOO=foo.bar $ BAR=bar $ BAZ=baz $ echo ${FOO/$BAR/$BAZ} foo.baz 

现在CMD在模式和replace都是常量时有类似的命令replace:

 C:\>set FOO=foo.bar C:\>set BAR=bar C:\>set BAZ=baz C:\>echo %FOO:bar=baz% foo.baz 

但是,我似乎无法在那里引用variables –

 C:\>echo %FOO:%BAR%=%BAZ%% %foo:bar=baz% 

我该怎么做? 用于指出在batch file的FOR循环中也可以使用的东西的奖励点。

以下(批处理文件)应该工作并打印“foo.baz”:

  setlocal enabledelayedexpansion set FOO=foo.bar set BAR=bar set BAZ=baz echo !FOO:%BAR%:%BAZ%! 

(关于你提到的FOR循环的东西,你需要提供更多关于你的意思的信息。)

从命令行:
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 

你可以使用延迟扩展而不是第二次调用来优化它(调用是昂贵的),但是已经显示了,所以我把它作为语法的一个例子。 如果你不需要在block里面设置变量,你可以进一步简化它。