Windows 参数的CMD变量替换

Windows 参数的CMD变量替换,windows,shell,cmd,Windows,Shell,Cmd,我正在尝试获得与以下bash功能相当的CMD: $ 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 %

我正在尝试获得与以下
bash
功能相当的CMD:

$ 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
循环内部也有效的内容的额外点数

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

(关于您提到的FOR循环,您需要提供更多关于您的确切含义的信息。)

来自命令行:
调用echo%FOO:%bar%=%baz%%

在批处理和for循环中:

@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

您可以通过使用延迟扩展而不是第二次调用来优化它(调用很昂贵),但这已经显示出来了,所以我将其作为语法示例。如果不需要为块设置
内部替换中使用的变量,可以进一步简化它

谢谢,这在循环中也能起作用(幸运的是,我的%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