我的代码的这部分应该由文件的所有行运行,检测百分号并更改为双百分号。然后,回应结果。
继承我的代码:
@echo off
REM | Using this line to test the code: % %% %%% %test%
setlocal enabledelayedexpansion
for /F "tokens=*" %%a in ( %~0 ) do set %a=!%a:%%=%%%%! & echo %%a
pause
这是它产生的输出:
@echo off
REM | Using this line to test the code: % %% %%% %test%
setlocal enabledelayedexpansion
for /F "tokens=*" %%a in ( %~0 ) do set %a=%%=%%%% & echo %%a
pause
它出了什么问题?我似乎无法找到该行的任何问题!
答案 0 :(得分:3)
find / replace不适用于FOR变量。它仅适用于环境变量。因此,您必须将%%a
值传递给环境变量,然后使用环境变量进行查找/替换。
扩展位于带括号的块(FOR循环的一部分)内,因此您必须使用延迟扩展。如果在展开FOR变量时启用了延迟扩展,FOR循环将破坏包含!
的值。因此,必须在循环内打开和关闭延迟扩展。
无需更改变量,然后回显新值。只需直接回显更改后的值,而无需将新值存储在变量中。
@echo off
setlocal disableDelayedExpansion
REM | Using this line to test the code: % %% %%% %test%
for /f "usebackq delims=" %%a in ("%~f0") do (
set "str=%%a"
setlocal enableDelayedExpansion
echo !str:%%=%%%%!
endlocal
)
pause