本帖最后由 buyiyang 于 2023-11-29 14:23 编辑
回复 14# aloha20200628
在 for 循环语句块内保全读入文本行中 ^&!%<\|/> 等特殊字符的关键,是安排变量延迟的开关位置
准确地说,保全"!"这一个特殊字符的关键是安排变量延迟的开关位置,其他特殊字符的处理是在for的索引变量扩展之前的,索引变量扩展之后不会再处理,
如果文本行没有"!",变量延迟的开关位置放在前面也可以。
for无法读取空行我的理解是,for语句执行do语句的索引就是索引变量%%i,当索引变量为空时就不会执行do语句,
比如 for %%i in () do echo,exist 就不会执行,这个特性有时候也可以利用,http://www.bathome.net/thread-66195-1-1.html- for /f "tokens=2" %%i in ('wmic process where "Name='WMIC.exe'" get Caption^,ExecutablePath') do set path=%%i
- echo %path%
复制代码 某些行只有一个多余的回车字符,当行只有一个字段时,而%%i被赋的值是第二个字段,为空,所以该轮循环的do不会执行,这样回车字符所在行就被过滤了。
关于延迟变量,我觉得有一个需要注意的点,由于变量延迟扩展,对特殊字符的处理在前,- setlocal enabledelayedexpansion
- set /a n=100
- if !n:~0,1! equ 1 echo,equal
复制代码 这里逗号,作为分隔符先被解析,导致扩展出错,需要加双引号,双引号内的特殊字符不会被处理。 |