CMD变量替换参数

时间:2012-08-28 08:21:05

标签: windows shell cmd

我正在努力让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循环内工作的内容的加分点。

2 个答案:

答案 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块中设置替换使用的变量,则可以进一步简化它。