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

[文本处理] [已解决]批处理如何剪切特定文本内容到新的文本中?

现有一个文件夹中有多个以ABC开头的文本文件(ABC1.TXT,ABC2.TXT......),文本的结构相同,下面数据中的空格实际上已TAB键分隔
1good        34good6        7good79        good3               
66        7        8        9        9        111
888        7        good        4        0        8
-        bgood        6t        11        33        6       
-        b        c        6good79        i1       
good                FF        3        7       
        33good5        6        9        9       
                                        9-8
                                9        0
                        good79               
good        66        8        8        90        768
将第五列的数据进行比较,若为9或者无内容,则将整行剪切出去,另存为新的文本,新的文件名是旧的的文件名_1即可(如ABC1.TXT->ABC1_1.TXT),麻烦高手具体指点,不胜感激。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

没有明白你的意思,剪切?

你的新文件里是想要
  1. 1good        34good6        7good79        good3
  2. 888        7        good        4        0        8
  3. -        bgood        6t        11        33        6       
  4. -        b        c        6good79        i1
  5. good                FF        3        7       
  6.         33good5        6        9        9
  7.                                         9-8
  8.                                 9        0
  9.                         good79       
  10. good        66        8        8        90        768
复制代码
还是想要
  1. 66        7        8        9        9        111
复制代码
问题要说清楚,要不大家很难帮你的哦。

TOP

回复 2# 冷玉公子


    将第五列数值为9或者为空的行剪切出去,及新文本内容为
1good        34good6        7good79        good3               
66        7        8        9        9        111
        33good5        6        9        9       
                                        9-8
                                9        0
                        good79

TOP

我现在只知道复制出去

TOP

本帖最后由 ArdentMan 于 2011-9-17 16:28 编辑
  1. @Echo Off
  2. For /F "delims=" %%a In ('Dir /b ABC*.txt') Do (
  3.   For /F "delims=" %%b In (%%a) Do (
  4.     For /F "tokens=5" %%c in ("%%b") Do (
  5.       If "%%c" EQU "9" Set "Flag=a"
  6.       If "%%c" EQU "" Set "Flag=a"
  7.     )
  8.     If Defined Flag (
  9.       Echo %%b>>%%~na_1.txt&Set "Flag="
  10.       ) Else (
  11.       Echo %%b>>$
  12.     )
  13.   )
  14.   Move $ %%a
  15. )
复制代码
一路飘过的鸟~~~

TOP

回复 5# ArdentMan 谢谢,但是结果不对。

TOP

回复 6# xslxslxsl


    请具体描述一下,好修改代码
一路飘过的鸟~~~

TOP

我是用fr ABC1.txt -r:"^.*\t.*\t.*\t.*\t9?\t.*\n?" -t -stdout > ABC1_1.txt 将第五列不为9或空的输出到新文件中,但是我就是不会将原文件中提出来的那些给删除掉,也就是留取第五列为9或空的内容,望高手指点。

TOP

请仔细看你顶楼的描述吧
什么叫剪切?
既然是不删除更容易了:
  1. @Echo Off
  2. For /F "delims=" %%a In ('Dir /b ABC*.txt') Do (
  3.   (For /F "delims=" %%b In (%%a) Do (
  4.     For /F "tokens=5" %%c in ("%%b") Do (
  5.       If "%%c" EQU "9" Echo %%b
  6.       If "%%c" EQU "" Echo %%b
  7.     )
  8.   ))>%%~na_1.txt
  9. )
复制代码
一路飘过的鸟~~~

TOP

回复 7# ArdentMan
首先我还是很感谢你的回复及帮助,我的文本文件共六列,每列之间用TAB键进行分隔,现在要判断第五列的数据情况,若为9或者为空的就将该行剪切出去形成一个新的文本,但是根据你的代码仅仅剪切出了66        7        8        9        9        111此行,还有几行符合条件,但是没有剪切出来,现在我将文本的例子放上来,谢谢。

TOP

回复 10# xslxslxsl


以后求助时,尽量在顶楼就给出这样的测试数据。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 xslxslxsl 于 2011-9-17 22:05 编辑

回复 11# Batcher


    是的,记住了,起初是打算放上来的,可是添加附件总是提示错误,不知道是什么原因。
附件放上来了,请大家看看,帮忙解决。

TOP

代码重新修改如下,请及时反馈~~~
  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. Rem 请将下面的Tab变量的值替换为实际的制表符
  3. Set "Tab=     "
  4. For /F "delims=" %%a In ('Dir /b ABC*.txt') Do (
  5.   (For /F "delims=" %%b In (%%a) Do (
  6.     Set "Str=%%b"&Set "Str=!Str:%Tab%= @#$!"
  7.     For /F "tokens=5" %%c in ("!Str!") Do (
  8.       If "%%c" EQU "@#$9" Echo %%b
  9.       If "%%c" EQU "@#$" Echo %%b
  10.     )
  11.   ))>%%~na_1.txt
  12. )
复制代码
一路飘过的鸟~~~

TOP

本帖最后由 xslxslxsl 于 2011-9-17 23:21 编辑

回复 13# ArdentMan
谢谢,经过测试                                9        0与                                        9-8此两行数据不能成功复制出去哦,不知道为什么

TOP

应该是此列中有空格存在~~~
一路飘过的鸟~~~

TOP

返回列表