[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 aloha20200628 于 2023-11-29 13:00 编辑

回复 15# qixiaobin0715


采用 set/p 读入文件可将空行读为空串,但其有内生限制,每行读入量<1k。
set/p 写出文件的每行字节长度仍是<8k,但会拦截行首空格。

TOP

本帖最后由 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
  1. for /f "tokens=2" %%i in ('wmic process where "Name='WMIC.exe'" get Caption^,ExecutablePath') do set path=%%i
  2. echo %path%
复制代码
某些行只有一个多余的回车字符,当行只有一个字段时,而%%i被赋的值是第二个字段,为空,所以该轮循环的do不会执行,这样回车字符所在行就被过滤了。

关于延迟变量,我觉得有一个需要注意的点,由于变量延迟扩展,对特殊字符的处理在前,
  1. setlocal enabledelayedexpansion
  2. set /a n=100
  3. if !n:~0,1! equ 1 echo,equal
复制代码
这里逗号,作为分隔符先被解析,导致扩展出错,需要加双引号,双引号内的特殊字符不会被处理。

TOP

本帖最后由 qixiaobin0715 于 2023-11-29 15:32 编辑

回复 16# aloha20200628
有限制很正常啊,应当能够应付通常情况;
在for循环中应用set /p 逐行读取文本,正常情况下行首有空格也不会出现什么问题吧。

TOP

返回列表