cmd.exe中如何用百分号替换?

How to replace with percent character in cmd.exe?

在 Windows 命令提示符中,我试图用字符串 %20 替换 set string=Hello World 中的 space。像这样天真地尝试使用字符串文字 %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, which handles the escaping of percent characters in variables. I also found this,它处理百分比字符的转义输入。但是似乎都不适用于字符串替换。

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

看完所有这些之后,我尝试了:

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

结果是 !string: =%20!.

我没主意了,你能帮忙吗?

在这种情况下您需要 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?