Board logo

标题: [文本处理] [已解决]批处理删除文本中空行的脚本修改 [打印本页]

作者: yun1831    时间: 2008-7-29 20:08     标题: [已解决]批处理删除文本中空行的脚本修改

  1. @echo off
  2. ::By Shilyx mailto oversleep@163.com
  3. if {%1}=={} goto :EOF
  4. :begin
  5. if {%1}=={} goto end
  6. call elBlank %1
  7. shift
  8. goto begin
  9. elBlank
  10. if not exist %1 goto :EOF
  11. echo Deleting Balnk Lines in %1
  12. echo.
  13. type %1 | findstr /V "^$" >C:\_tmp.Shilyx
  14. type C:\_tmp.Shilyx>%1
  15. goto :EOF
  16. :end
  17. if exist C:\_tmp.Shilyx del C:\_tmp.Shilyx
  18. echo Process Succeed, press any key to exit ...
  19. pause>nul
复制代码
这段脚本可以,但是稍大一点文件就会产生乱码,高手请修改一下,不胜感谢!
作者: batman    时间: 2008-7-29 20:38

我晕,这么复杂,没必要改了,直接给你一个:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('type a.txt') do (
  3.      if not defined flag (echo.%%i>a.txt&set "flag=a") else (echo.%%i>>a.txt)
  4. )
  5. start a.txt
复制代码

[ 本帖最后由 batman 于 2008-7-29 20:55 编辑 ]
作者: namejm    时间: 2008-7-29 20:53

  要想兼容所有特殊情况(行首是分号、冒号、行内带感叹号、&、>、|……最后两个字符为空格+0~9),还是需要用这个代码:
  1. @echo off
  2. cd.>reslut.txt
  3. for /f "delims=" %%i in ('findstr /n .* test.txt') do (
  4.     set "str=%%i"
  5.     setlocal enabledelayedexpansion
  6.     set "str=!str:*:=!"
  7.     if defined str (echo.!str!)>>reslut.txt
  8.     endlocal
  9. )
  10. start reslut.txt
复制代码

作者: batman    时间: 2008-7-29 21:01

原帖由 namejm 于 2008-7-29 20:53 发表
  要想兼容所有特殊情况(行首是分号、冒号、行内带感叹号、&、>、|……最后两个字符为空格+0~9),还是需要用这个代码:@echo off
cd.>reslut.txt
for /f "delims=" %%i in ('findstr /n .* test.txt') do (
...

考虑的好全啊!namejm就是namejm,学习了。
作者: bakdfkuk    时间: 2009-3-5 10:50     标题: 好像有点不行啊!

对于第一行有空行的文本,处理起来不行啊,能不能改进呢?
作者: Batcher    时间: 2020-10-31 22:01

删除一个文件中的空行:
  1. findstr "." "1.txt" > "2.txt"
复制代码
删除多个文件中的空行:
  1. @echo off
  2. chcp 65001
  3. for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  4.     findstr "." "%%i" > "%%i.tmp"
  5.     move /y "%%i.tmp" "%%i"
  6. )
复制代码





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