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

批处理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 编辑 ]
技术问题请到论坛发帖求助!

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

TOP

记得namejm的帖子有总结。for /f "eol=" 会忽略以引号"开头的行。
for /f 的确有点矛盾,引号"不能作为分隔符,竟然能作为注释字符(忽略以该字符开头的行)。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 3楼 的帖子

确实会忽略引号开头的行。看来这个办法不行。
技术问题请到论坛发帖求助!

TOP

要不就是让eol=一个不常用到的字符 不常用到的汉字也行
for /f "delims= eol=艹" %a in (1.txt) do echo %a
上边的就是五笔打出来的一个“草字头”

TOP

回复 5楼 的帖子

用楼主提到的不可见字符更好,用输入法直接打是打不出来的。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

eol 后面加个空格就不会忽略"和; 开头的行了,但是空格还是不行

TOP

仅有[空格]或[Tab]的行是可以读出的,只是空行(没有任何字符的行)是不能读出来的,如果不用任何外部程序辅助的话。

TOP

  提取文本的整行内容,还是得祭出 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
复制代码
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

返回列表