我的批处理代码有问题。未检测到或未更改所需的字符

时间:2016-12-29 12:05:27

标签: batch-file

我的代码的这部分应该由文件的所有行运行,检测百分号并更改为双百分号。然后,回应结果。

继承我的代码:

@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 

它出了什么问题?我似乎无法找到该行的任何问题!

1 个答案:

答案 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