Board logo

标题: 请教eol=可否忽略多个? [打印本页]

作者: FBOAR     时间: 2007-1-16 00:26    标题: 请教eol=可否忽略多个?

我想忽略以;和s开头的行
eol=;,s  行不通
此句该如何写?
作者: vkill     时间: 2007-1-16 00:30
貌似不可以
作者: oilio     时间: 2007-1-16 01:39
命令解释就是指定一个啊,没听说可以那样搞,如果有人那样能搞成功,还真的期待。。。。
作者: redtek     时间: 2007-1-16 01:53
假如要滤掉下面 A.TXT 文件中 “;” 和 “S” 开头的行内容:
CODE:  [Copy to clipboard]
;China
;Beijing
ShangHai
NanJing
;DaLian
HeBei
HeNan
中国
北京
上海


  Quote:
@echo off

for /f "eol=;" %%a in ('for /f "eol=S" %%b in ^(a.txt^) do @echo %%b') do echo %%a

分两次间接实现:(棕色)部分代码将滤掉 “S” 字母之后的字符串再次给它的调用者(黑色)部分代码。

而(黑色)部分代码 for 中的 eol 参数又会把 “;” 符号滤过,最后结果就等于间接实现了同时滤掉 “;” 和 “S” 这两个字符。




上面输出结果:
CODE:  [Copy to clipboard]
NanJing
HeBei
HeNan
中国
北京
上海
注: eol 参数区分字母的大小写
   eol 参数可以滤掉一个中文汉字(它同样把一个汉字当做象英文字母一样的一个“字节”来看待)

[ Last edited by redtek on 2007-1-15 at 12:54 PM ]
作者: 9527     时间: 2007-1-16 01:59
有些时候不要把问题想的都这么复杂,可以用FOR进行二次过滤啊,虽然影响速度那也比一个个的弄好啊

演示文本
CODE:  [Copy to clipboard]
good
hello
ssldjf
ppp
ssss
nnnns
sdl,nf
kkkskdhnkfsdf
jhk
kdkkk
对应过滤代码如下:
CODE:  [Copy to clipboard]
@echo off&setlocal
for /f "eol=s tokens=*" %%a in (ii.txt) do (
for /f "eol=k tokens=*" %%x in ('echo/%%a') do echo %%x
)
虽然没有进行对特殊字符情况的考虑,不过你可以在次改造来实现啊
作者: 9527     时间: 2007-1-16 02:00
呵呵,redtek兄抢先了....当灌水了

[ Last edited by 9527 on 2007-1-16 at 02:02 AM ]
作者: vkill     时间: 2007-1-16 02:06
要是很多那?
作者: lxmxn     时间: 2007-1-16 05:07


  Quote:
Originally posted by vkill at 2007-1-15 13:06:
要是很多那?


  可以变通一下,用findstr /v。我的a.txt文档:

  Quote:
China
Hubei
catalog
Visual FoxPro
China DOS Union
Windows Management Instrumentation Commandline
www.cn-dos.net
People
Vbscript and Javascript
中国DOS联盟
批处理脚本技术
Welcome to China DOS Union
You will learn much more from this forum.

  忽略以"C"、"V"、"中"开始的所有行:
CODE:  [Copy to clipboard]
@echo off
(for /f "delims=" %%a in ('findstr /v "^C.* ^中.* ^V.*" a.txt') do (echo=%%a))&pause&exit/b 0

作者: Eblis     时间: 2007-1-16 13:50
lxmxn.高哇..这样可以忽略很多了...
作者: lxmxn     时间: 2007-1-16 14:21

  嘿嘿,批处理就是没有做不到,只有想不到。

作者: FBOAR     时间: 2007-1-17 01:21
感谢楼上几位朋友的回答 谢谢
作者: luowei14     时间: 2007-1-18 07:39
看来FOR 命令要多学学了 。。。
作者: beeny     时间: 2007-1-18 12:31
[quote]Originally posted by lxmxn at 2007-1-15 04:07 PM:


  可以变通一下,用findstr /v。我的a.txt文档:


  忽略以"C"、"V"、"中"开始的所有行:
[code]

@echo off
(for /f "delims=" %%a in ('findstr /v "^C.* ^中.* ^V.*" a.txt') do (echo=%%a))&pause&exit/b 0
红色部分中^这个符号是什么意思,为什么要用这个符号?
作者: lxmxn     时间: 2007-1-18 13:51

  ^符号在findstr里面代表匹配一个字符串的开头,而$代表匹配一个字符串的结尾,具体说明请看findstr /?。

作者: oilio     时间: 2007-1-28 06:19
lxmxn兄,我用过你说的方法,忽略以字符打头的行,我知道了。忽略以某某字符结尾的行,我没有试出来,不知道问题出在什么地方,看一下帮助命令,也没有发现什么。我是这样用的。忽略以“e,n,术”结尾的行
for /f "delims=" %a in ('findstr /v "$e.* $n.* $术.*" a.txt') do @echo %a
不知道错在什么地方,高手指点一下啊,在这儿谢过了。
作者: lxmxn     时间: 2007-1-28 11:03

  Re oilio:

  你这样试试:
CODE:  [Copy to clipboard]
for /f "delims=" %a in ('findstr /v ".*e$ .*n$ .*术$" a.txt') do @echo %a

作者: oilio     时间: 2007-1-29 00:12
谢谢,我好像明白了问题所在之处,谢谢。
作者: zhclvip     时间: 2007-1-30 00:23
eol=c           - 指一个行注释字符的结尾(就一个)




欢迎光临 中国DOS联盟论坛 (http://cndos.fam.cx/forum/) Powered by Discuz! 2.5