找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: skpkmon

[文本处理] [已解决]文字txt内文字,批处理如何删除最尾的符号?

[复制链接]
发表于 2023-11-29 12:51:46 | 显示全部楼层
本帖最后由 aloha20200628 于 2023-11-29 13:00 编辑

回复 15# qixiaobin0715


采用 set/p 读入文件可将空行读为空串,但其有内生限制,每行读入量<1k。
set/p 写出文件的每行字节长度仍是<8k,但会拦截行首空格。
发表于 2023-11-29 14:14:47 | 显示全部楼层
本帖最后由 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
复制代码
这里逗号,作为分隔符先被解析,导致扩展出错,需要加双引号,双引号内的特殊字符不会被处理。
发表于 2023-11-29 15:31:18 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2023-11-29 15:32 编辑

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

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 06:35 , Processed in 0.015790 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表