标题: [文本处理] [已解决]批处理怎样搜索文本文件并自动删除空行空格? [打印本页]
作者: temp 时间: 2010-10-30 00:22 标题: [已解决]批处理怎样搜索文本文件并自动删除空行空格?
本人经常从网上粘贴文章,发现有空行或空格,手工删除太麻烦,于是想到用批处理解决
从网上搜集改写为如下代码后,测试发现DOS窗口显示dir 。。。。/s。。。。生成的文件名为***.txt.txt(***为搜到的文件名),多了一个.txt
start %%a.txt这一条提示找不到某某文件
请朋友们帮忙完善,谢谢!
(如果能写成***.doc,可以用WINWORD直接编辑就更好了)- @echo off
- title 去除空行
- @for %%a in (dir /s *.txt) do (
- for /f "delims=" %%i in (%%a) do >>%%a.txt echo %%i
- )
- start %%a.txt
- pause
复制代码
[ 本帖最后由 temp 于 2010-11-16 20:51 编辑 ]
作者: temp 时间: 2010-10-30 00:31
改写成如下,DOS窗口仍然显示:系统找不到dir,系统找不到/s。。。。生成的文件名为***.txt.doc;windows找不到%a.doc
- @echo off
- title 去除空行
- @for %%a in (dir /s *.txt) do (
- for /f "delims=" %%i in (%%a) do >>%%a.doc echo %%i
- )
- start %%a.doc
- pause
复制代码
作者: brain123 时间: 2010-10-30 01:37
根据你的要求,写了一版。加了一些修饰代码,可以视自己需要去除。
由于担心同时搜到被修改文件较多,没有加入修改后自动打开被修改文件的命令,
但提供了查询那些文件被修改的询问提示。- @ECHO OFF
- TITLE 去除空行和空格
- COLOR 0E
- CLS
- ECHO.
- ECHO 处理中,请稍候...
- PING -n 2 127.0.0.1>nul
- ECHO.
- DIR /S /B *.txt>temp.tmp
- FOR /F %%A in (.\temp.tmp) do (
- FOR /f "delims=" %%B in (%%A) do (
- setlocal enabledelayedexpansion
- set "str=%%B"
- set "str=!str: = !"
- set "str=!str: = !"
- set "str=!str: =!"
- echo !str!>>"%%A__.txt"
- endlocal
- )
- )
- CLS
- ECHO.
- ECHO.
- ECHO 处理完毕,已自动在原文件所在目录生成后缀为__的txt文档。
- ECHO.
- SET /P LIST=是否需要列出已作处理的文件清单(Y/N)?
- ECHO.
- :CHECKOK
- IF %LIST%==Y GOTO OKOK
- IF %LIST%==y GOTO OKOK
- IF %LIST%==N GOTO NOOK
- IF %LIST%==n GOTO NOOK
- @ECHO.
- SET /P LIST=只能在Y/N之间作选择,请重新确认(Y/N):
- GOTO CHECKOK
- :OKOK
- CLS
- ECHO.
- ECHO 以下为已作过处理的文档:
- ECHO.
- MORE .\temp.tmp
- ECHO.
- ECHO.
- PAUSE
- GOTO NEXT
- :NOOK
- ECHO.
- ECHO.
- PAUSE
- GOTO NEXT
- :NEXT
- DEL .\temp.tmp
- 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
- @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 "a=%%i"
- set "a=!a: =!"
- if "!a!" neq "" (echo !a!>>%%a)
- )
- set "n="
- )
- 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
如果进行全盘查找的话,可能存在多个同名文件,另外效率也是个问题,个人建议,还是放在指定的文件夹里吧,以下仅是去除空格及空行的代码- @echo off&setlocal enabledelayedexpansion
- title 去除空行及空格
- rem 请注意使用,有些空格或空行在文章里是有一定作用的
- findstr /i "." a.txt >>b.txt
- for /f "delims=" %%i in (b.txt) do (set a=%%i&echo !a: =! >>c.txt)
- echo 操作已完毕,请验证操作结果.
- del b.txt
- 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去掉了,到死窗口还是有系统找不文件到的提示,如下图:-
- @echo off
- title 去除空行
- md .\temp1
- @for %%a in (dir /s /b *.txt) do (
- for /f "delims=" %%i in (%%a) do >>.\temp1\%%a echo %%i
- )
- 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
兄弟!我琢磨很久才模仿着写出来的,让我自己弄精通是不好办了,因为我没学过微机课(俺上学时还不知道什么是电脑,也没听说过),希望你直接帮忙完善一下吧!谢谢!
作者: 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
复制代码
作者: 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 |