Board logo

标题: [文本处理] [已解决]批处理怎样搜索文本文件并自动删除空行空格? [打印本页]

作者: temp    时间: 2010-10-30 00:22     标题: [已解决]批处理怎样搜索文本文件并自动删除空行空格?

本人经常从网上粘贴文章,发现有空行或空格,手工删除太麻烦,于是想到用批处理解决

从网上搜集改写为如下代码后,测试发现DOS窗口显示dir 。。。。/s。。。。生成的文件名为***.txt.txt(***为搜到的文件名),多了一个.txt

start %%a.txt这一条提示找不到某某文件

请朋友们帮忙完善,谢谢!

(如果能写成***.doc,可以用WINWORD直接编辑就更好了)
  1. @echo off
  2. title 去除空行
  3. @for %%a in (dir /s *.txt) do (
  4. for /f "delims=" %%i in (%%a) do >>%%a.txt echo %%i
  5. )
  6. start %%a.txt
  7. pause
复制代码

[ 本帖最后由 temp 于 2010-11-16 20:51 编辑 ]
作者: temp    时间: 2010-10-30 00:31

改写成如下,DOS窗口仍然显示:系统找不到dir,系统找不到/s。。。。生成的文件名为***.txt.doc;windows找不到%a.doc

  1. @echo off
  2. title 去除空行
  3. @for %%a in (dir /s *.txt) do (
  4. for /f "delims=" %%i in (%%a) do >>%%a.doc echo %%i
  5. )
  6. start %%a.doc
  7. pause
复制代码

作者: brain123    时间: 2010-10-30 01:37

根据你的要求,写了一版。加了一些修饰代码,可以视自己需要去除。
由于担心同时搜到被修改文件较多,没有加入修改后自动打开被修改文件的命令,
但提供了查询那些文件被修改的询问提示。
  1. @ECHO OFF
  2. TITLE 去除空行和空格
  3. COLOR 0E
  4. CLS
  5. ECHO.
  6. ECHO 处理中,请稍候...
  7. PING -n 2 127.0.0.1>nul
  8. ECHO.
  9. DIR /S /B *.txt>temp.tmp
  10. FOR /F %%A in (.\temp.tmp) do (
  11.     FOR /f "delims=" %%B in (%%A) do (
  12.     setlocal enabledelayedexpansion
  13.     set "str=%%B"
  14.     set "str=!str: = !"
  15.     set "str=!str: = !"
  16.     set "str=!str: =!"
  17.     echo !str!>>"%%A__.txt"
  18.     endlocal
  19.     )
  20. )
  21. CLS
  22. ECHO.
  23. ECHO.
  24. ECHO 处理完毕,已自动在原文件所在目录生成后缀为__的txt文档。
  25. ECHO.
  26. SET /P LIST=是否需要列出已作处理的文件清单(Y/N)?
  27. ECHO.
  28. :CHECKOK
  29. IF %LIST%==Y GOTO OKOK
  30. IF %LIST%==y GOTO OKOK
  31. IF %LIST%==N GOTO NOOK
  32. IF %LIST%==n GOTO NOOK
  33. @ECHO.
  34. SET /P LIST=只能在Y/N之间作选择,请重新确认(Y/N):
  35. GOTO CHECKOK
  36. :OKOK
  37. CLS
  38. ECHO.
  39. ECHO 以下为已作过处理的文档:
  40. ECHO.
  41. MORE .\temp.tmp
  42. ECHO.
  43. ECHO.
  44. PAUSE
  45. GOTO NEXT
  46. :NOOK
  47. ECHO.
  48. ECHO.
  49. PAUSE
  50. GOTO NEXT
  51. :NEXT
  52. DEL .\temp.tmp
  53. EXIT
复制代码

作者: brain123    时间: 2010-10-30 01:41

set "str=!str:        = !"

注:这一串长的空格,复制到文本文件中,请改为"table键"再保存。


第2个CLS之后的内容可有可无,只是用来作修饰的。
作者: temp    时间: 2010-11-7 00:05     标题: 回复 3楼 的帖子

谢谢!
最近几天没上网,待我试试
作者: temp    时间: 2010-11-7 00:33

原帖由 brain123 于 2010-10-30 01:41 发表
set "str=!str:        = !"

注:这一串长的空格,复制到文本文件中,请改为"table键"再保存。


第2个CLS之后的内容可有可无,只是用来作修饰的。

我把
    set "str=!str:        = !"
    set "str=!str: = !"
    set "str=!str: =!"
第一行的空格用"table键"代替和三行全用"table键"代替,都没生成需要的文件
作者: lvsehuaxue    时间: 2010-11-11 13:55

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /s /b .\*.txt') do (
  3.     for /f "delims=" %%i in (%%a) do (
  4.         if not defined n (cd.>%%a)
  5.         set n=1
  6.         set "a=%%i"
  7.         set "a=!a: =!"
  8.         if "!a!" neq "" (echo !a!>>%%a)
  9.    )
  10. set "n="
  11. )
  12. pause
复制代码

作者: temp    时间: 2010-11-13 06:47

原帖由 lvsehuaxue 于 2010-11-11 13:55 发表
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /s /b .\*.txt') do (
    for /f "delims=" %%i in (%%a) do (
        if not defined n (cd.>%%a)
        set n=1
        set  ...

谢谢!

还是不行,显示:

系统找不到文件 C:\Documents。
请按任意键继续. . .
作者: brain123    时间: 2010-11-13 11:24

只需第一行用table代替,后面的不用改。
作者: wc726842270    时间: 2010-11-13 16:38

如果进行全盘查找的话,可能存在多个同名文件,另外效率也是个问题,个人建议,还是放在指定的文件夹里吧,以下仅是去除空格及空行的代码
  1. @echo off&setlocal enabledelayedexpansion
  2. title 去除空行及空格
  3. rem 请注意使用,有些空格或空行在文章里是有一定作用的
  4. findstr /i "." a.txt >>b.txt
  5. for /f "delims=" %%i in (b.txt) do (set a=%%i&echo !a: =! >>c.txt)
  6. echo 操作已完毕,请验证操作结果.
  7. del b.txt
  8. pause
复制代码

作者: temp    时间: 2010-11-14 20:03

原帖由 brain123 于 2010-11-13 11:24 发表
只需第一行用table代替,后面的不用改。


谢谢!

还是不行,请把你写的原件打成包传上来吧
作者: temp    时间: 2010-11-14 20:09

原帖由 wc726842270 于 2010-11-13 16:38 发表
如果进行全盘查找的话,可能存在多个同名文件,另外效率也是个问题,个人建议,还是放在指定的文件夹里吧,以下仅是去除空格及空行的代码@echo off&setlocal enabledelayedexpansion
title 去除空行及空格
rem 请注意使 ...

谢谢!

怪了,还是不行
作者: temp    时间: 2010-11-14 20:20

我自己重改了一下,后面多余的.TXT去掉了,到死窗口还是有系统找不文件到的提示,如下图:
  1. @echo off
  2. title 去除空行
  3. md .\temp1
  4. @for %%a in (dir /s /b *.txt) do (
  5. for /f "delims=" %%i in (%%a) do >>.\temp1\%%a echo %%i
  6. )
  7. pause
复制代码

作者: Batcher    时间: 2010-11-14 22:37     标题: 回复 13楼 的帖子

建议先看看基础教程

批处理for命令从入门到精通以及配套练习题
http://bbs.bathome.net/thread-2189-1-1.html
http://bbs.bathome.net/thread-2336-1-1.html
作者: wc726842270    时间: 2010-11-15 01:04     标题: 回复 12楼 的帖子

兄弟,我的a.txt是你要进行操作的文件.,c.txt是最后处理后的文件,b.txt是过程中的临时文件,我想你明白吧?我用可用啊!!!!!
作者: temp    时间: 2010-11-15 20:42     标题: 回复 15楼 的帖子

兄弟!你写的不如我在12楼写的实用,可以搜索当前文件夹下的所有.TXT文件,生成的和原文件名相同,是中文。

建议帮我完善12楼的代码,咱们共享
作者: temp    时间: 2010-11-15 20:53

原帖由 Batcher 于 2010-11-14 22:37 发表
建议先看看基础教程

批处理for命令从入门到精通以及配套练习题
http://bbs.bathome.net/thread-2189-1-1.html
http://bbs.bathome.net/thread-2336-1-1.html


兄弟!我琢磨很久才模仿着写出来的,让我自己弄精通是不好办了,因为我没学过微机课(俺上学时还不知道什么是电脑,也没听说过),希望你直接帮忙完善一下吧!谢谢!
作者: gshccr    时间: 2010-11-15 21:32

是这样吗
  1. @echo off
  2. for /f "delims=" %%i in ('dir/b/s/a-d "*.txt"') do (
  3.   findstr /r /c:"[^ ]" "%%i">%%~dpi__%%~nxi)
  4. pause
复制代码

作者: temp    时间: 2010-11-16 20:50

原帖由 gshccr 于 2010-11-15 21:32 发表
是这样吗@echo off
for /f "delims=" %%i in ('dir/b/s/a-d "*.txt"') do (
  findstr /r /c:"[^ ]" "%%i">%%~dpi__%%~nxi)
pause


谢谢!

可以用了~~




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