如何用cmd.exe中的百分比字符替换?

时间:2015-04-29 13:15:05

标签: windows replace cmd escaping

在Windows命令提示符下,我尝试将set string=Hello World中的空格替换为字符串%20。天真地尝试使用字符串文字%20:

set string=%string: =%20%

结果为HelloWorld20%。试图像这样使用转义字符^

set string=%string: =^%20%

也会产生HelloWorld20%。试图通过加倍%来逃避它:

set string=%string: =%%20%

结果为HelloWorld%20%。我还尝试使用另一个变量进行替换,如下所示:

set r=%20
set string=%string: =%r%%

会产生HelloWorldr%%

我找到this,它处理变量中百分比字符的转义。我还找到this,它处理转义百分比字符的输入。但似乎没有人适用于字符串替换。

我在网上找到的tutorial/docu page for the Windows cmd.exe告诉我我的语法正确,但不包括用百分号替换。

阅读完所有内容后,我尝试了:

setlocal EnableDelayedExpansion
set string=!string: =%20!

会产生!string: =%20!

我没有想法,你能帮忙吗?

1 个答案:

答案 0 :(得分:3)

在这种情况下你需要delayed expansion

set "str1=Hello World!"
set "str2=%20"
for /f "delims=" %a in ('cmd /v:on /c @echo "%str1: =!str2!%"') do set "str3=%~a"
echo %str3%

What is delayed expansion?