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