我正在试图获得以下bash
function的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里面设置变量,你可以进一步简化它。