Board logo

标题: 批处理for命令提取文本整行内容的方法 [打印本页]

作者: 随风    时间: 2009-4-22 14:09     标题: 批处理for命令提取文本整行内容的方法

:: @随风 @bbs.bathome.net @2009-04-22
3楼说的对,该方法会忽略引号开头的行

for 提取文本整行内容的方法
for默认会忽略空行,若想提取空行需使用其它的命令配合,在这里不讨论。
通常我们需要提取文本整行内容时都是这么写的。
  1. for /f "delims=" %%a in (a.txt) do echo.%%a
复制代码
但是分号开头的行呢,for也会忽略掉,很多时候我们需要这些行,怎么办。
用findstr 等外部命令太麻烦,用eol 忽略一个不可见字符,不失为一个不错的办法,但始终忽略了某个字符开头的行,且获取这个不可见字符也比较麻烦。
其实有更简单的方法,就是把eol放在最后。
:
  1. @echo off
  2. rem 提取所有行,可同时配合tokens使用,但无法以空格作分割符。
  3. for /f "delims= eol=" %%a in (a.txt) do echo.%%a
  4. pause
复制代码

[ 本帖最后由 随风 于 2010-9-2 11:08 编辑 ]
作者: woxingwoshu007    时间: 2009-4-22 15:29

原来这样也可以达到效果..以前认为delims elo位置调换没有什么关系..现在发觉凡是的好好琢磨..不可下定论...随风顶你了
作者: zqz0012005    时间: 2009-4-24 10:24

记得namejm的帖子有总结。for /f "eol=" 会忽略以引号"开头的行。
for /f 的确有点矛盾,引号"不能作为分隔符,竟然能作为注释字符(忽略以该字符开头的行)。
作者: 随风    时间: 2009-5-25 20:34     标题: 回复 3楼 的帖子

确实会忽略引号开头的行。看来这个办法不行。
作者: stuqx    时间: 2009-5-26 09:32

要不就是让eol=一个不常用到的字符 不常用到的汉字也行
for /f "delims= eol=艹" %a in (1.txt) do echo %a
上边的就是五笔打出来的一个“草字头”
作者: Batcher    时间: 2009-5-26 12:38     标题: 回复 5楼 的帖子

用楼主提到的不可见字符更好,用输入法直接打是打不出来的。
作者: zhangxu712    时间: 2009-5-26 21:13

eol 后面加个空格就不会忽略"和; 开头的行了,但是空格还是不行
作者: netbenton    时间: 2009-5-26 21:26

仅有[空格]或[Tab]的行是可以读出的,只是空行(没有任何字符的行)是不能读出来的,如果不用任何外部程序辅助的话。
作者: namejm    时间: 2009-5-26 21:48

  提取文本的整行内容,还是得祭出 for+findstr /n 大法,不惧任何特殊字符,把以前的代码拉出来演示一下:
  1. @echo off
  2. cd.>output.txt
  3. for /f "delims=" %%i in ('findstr /n .* test.txt') do (
  4.         set "var=%%i"
  5.         setlocal enabledelayedexpansion
  6.         set var=!var:*:=!
  7.         (echo.!var!)>>output.txt
  8.         endlocal
  9. )
  10. start output.txt
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2