Batch file 如何使用call命令替换for循环中的多个字符串-替换%是一个问题

Batch file 如何使用call命令替换for循环中的多个字符串-替换%是一个问题,batch-file,Batch File,考虑以下代码: @echo off chcp 65001 >NUL rem Main thread here which shows how to change each letter to UPPERCASE: https://stackoverflow.com/questions/34713621/batch-converting-variable-to-uppercase rem Comment here: https://stackoverflow.com/a/34734724/

考虑以下代码:

@echo off
chcp 65001 >NUL

rem Main thread here which shows how to change each letter to UPPERCASE: https://stackoverflow.com/questions/34713621/batch-converting-variable-to-uppercase
rem Comment here: https://stackoverflow.com/a/34734724/8262102
rem I want to use this code to replace multiple strings but I'm having difficulty
rem with getting % replaced with double % symbols.

set "str=Change %% to double %% and replace other ^(And convert brackets^)"
echo %str% (Old variable)
call :VALIDATE str
echo %str% (New variable)
pause
goto :EOF

:VALIDATE
if not defined %~1 exit /b
for %%A in ("^%^%=^%^%^%^%" "(='('" ")=')'") do (
call set %~1=%%%~1:%%~A%%
)
goto :EOF
这是将
替换为
”(“
替换为
)”

我无法将
%%
替换为
%%

我试图通过同时使用
%%
^%
来逃避
%
,但在代码
“^%^%=^%^%^%^%^%^%^%”中没有运气


我不知道该怎么做。

这对你有帮助吗

@Echo关闭
SetLocal EnableExtensions DisableDelayedExpansion
设置“str=将%%更改为%%%%,并将%%%%更改为%%
回显%str%
暂停
SetLocal EnableDelayedExpansion
设置“str=!str:%%=%%!”
设置“str=!str:(='('!”
设置“str=!str:)=')'!”
EndLocal&设置“str=%str%”
回显%str%
暂停
或类似地:

@Echo关闭
SetLocal EnableExtensions DisableDelayedExpansion
设置“str=将%%更改为%%%%,并将%%%%更改为%%
回显%str%(旧变量)
调用:验证str
回显%str%(新变量)
暂停
后藤:EOF
:验证
如果“%~1”==”退出/B
SetLocal EnableDelayedExpansion
设置“=!%~1!”
设置“=!:%%=%%!”
设置“=!”(=”(“!”
设置“=!:)=”)!“
EndLocal&设置“%~1=%\u1%”
退出/B
[编辑]

因为

@Echo关闭
SetLocal EnableExtensions DisableDelayedExpansion
设置“str=将%%更改为%%%%,并将%%%%更改为%%
回显%str%(旧变量)
调用:验证str
回显%str%(新变量)
暂停
后藤:EOF
:验证
如果“%~1”==”退出/B
SetLocal EnableDelayedExpansion
设置“=!%~1!”
对于(“%%=%%%”(='(')=')”)中的%%G,请设置“\=!\:%%~G!”
EndLocal&设置“%~1=%\u1%”
退出/B

谢谢,但如果可能的话,我希望for循环和调用保持相同的代码结构。@Ste,我已经添加了一个使用call的替代方法,但我不会浪费时间在不必要的
for
循环上。谢谢。我希望让for循环工作,因为这是问题的标题,因为它是替换多个字符串的一种简洁方式。我会看看是否能完成。我知道你想要一个@Ste,但正如我所说的,这是没有必要的,(从技术上讲,你的问题是关于用
%%
替换为
%%
)!您的for循环有效地执行了三个命令,我刚刚使用了相同的三个命令!你为什么认为你需要一个?我已经礼貌地把它添加为一个[编辑].啊,只是因为它是一个简洁的解决方案。谢谢我会试着让我的头脑明白这是如何起作用的,而我的却没有。我认为这是因为
setlocalenabledelayedexpansion
然后扩展变量
%~1
。回答得很好。