sjn*_*ngm 7 windows batch-file environment-variables
我想以SET动态方式使用命令的搜索/替换功能.
通常的方式是这样的
SET blah=double-foo
SET blah=%blah:foo=bar%
Run Code Online (Sandbox Code Playgroud)
现在我想在第二行使用变量而不是foo和bar:
SET search=foo
SET repl=bar
SET blah=double-foo
ECHO %blah%
SET blah=%blah:%search%=%repl%%
ECHO %blah%
Run Code Online (Sandbox Code Playgroud)
我只能得到
double-foo
searchrepl%
Run Code Online (Sandbox Code Playgroud)
我也试过了
SET blah=%blah:(%search%=%repl%)%
SET blah=%blah:(%search%)=(%repl%)%
Run Code Online (Sandbox Code Playgroud)
我怎么做到这一点?如果我这样做没有SET那么好.最后,我想要保持环境变量double-bar.
有两种常见的方式(有些不常见).
通过调用使用双扩展.
SET search=foo
SET repl=bar
SET blah=double-foo
CALL SET blah=%%blah:%search%=%repl%%%
Run Code Online (Sandbox Code Playgroud)
在第一个"扫描"中,它会扩展到CALL SET blah=%blah:foo=bar%,并且调用会将秒时间扩展到所需的结果.
第二种方式是延迟变种
SETLOCAL EnableDelayedExpansion
SET search=foo
SET repl=bar
SET blah=double-foo
SET blah=!blah:%search%=%repl%!
Run Code Online (Sandbox Code Playgroud)
它起作用,因为在扩展百分比之后执行延迟扩展.
我更喜欢延迟变体,因为它对特殊字符更快更安全.
一种不常见的方法是FOR-Loop-Variable变体,它也适用于搜索/替换变量中的特殊字符.
SETLOCAL EnableDelayedExpansion
SET "search=foo>"
SET "repl=bar & bar"
SET "blah=double-foo> &|<>"
for %%s in ("!search!") do (
for %%r in ("!repl!") do (
SET "blah=!blah:%%~s=%%~r!"
)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4365 次 |
| 最近记录: |