找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 38942|回复: 7

[文本处理] [已解决]批处理删除文本中空行的脚本修改

[复制链接]
发表于 2008-7-29 20:08:04 | 显示全部楼层 |阅读模式
  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
复制代码
这段脚本可以,但是稍大一点文件就会产生乱码,高手请修改一下,不胜感谢!
发表于 2008-7-29 20:38:04 | 显示全部楼层
我晕,这么复杂,没必要改了,直接给你一个:
  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 编辑 ]
发表于 2008-7-29 20:53:30 | 显示全部楼层
  要想兼容所有特殊情况(行首是分号、冒号、行内带感叹号、&、>、|……最后两个字符为空格+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
复制代码

评分

参与人数 1PB +6 收起 理由
more + 6

查看全部评分

发表于 2008-7-29 21:01:53 | 显示全部楼层
原帖由 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,学习了。
发表于 2009-3-5 10:50:03 | 显示全部楼层

好像有点不行啊!

对于第一行有空行的文本,处理起来不行啊,能不能改进呢?
发表于 2020-10-31 22:01:08 | 显示全部楼层
删除一个文件中的空行:
  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. )
复制代码

评分

参与人数 1技术 +1 收起 理由
yyz219 + 1 感谢分享

查看全部评分

发表于 2025-12-7 21:42:59 | 显示全部楼层
回复 6# Batcher


    很好的代码
发表于 2025-12-8 14:18:54 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-12-8 14:38 编辑


用批处直接读写文本文件,读取会自动过滤空行,但用 echo 写出不会删除末尾换行符,且有每行字符量8KB的限制,还有行首字符过滤设置(默认是 ; 字符),以下一行流纯批取消了行首字符过滤设置...

  1. (for /f "delims="eol^= %%a in (1.txt) do echo,%%a)>2.txt
复制代码
在没有预装 powershell 的系统中,如果要删除全部空行包括末尾换行符,可用以下代码

  1. @echo off &setlocal &findstr "." 1.txt>#.$
  2. for /f %%n in ('find /c /v ""^<#.$') do set "n=%%n"
  3. (for /f "tokens=1* delims=:" %%a in ('findstr /n ".*" #.$') do if %%a neq %n% (echo,%%b) else set/p="%%b"<nul)>2.txt
  4. del /q #.$ &pause&exit/b
复制代码
但以上代码要求最后一行首字符不能是空格或跳格,否则会被扣除,以下 bat+jscript 脚本(存为 test.bat 运行)会弥补此缺憾,突破每行8KB字符量限制,而且能够兼容 ansi(即gb2312) 和 utf-8 编码文件,删除全部空行及其末尾换行符...

  1. 2>1/* ::
  2. @echo off &cscript /nologo /e:jscript "%~f0" 1.txt 2.txt &pause&exit/b */
  3. v=WSH.arguments, as=WSH.createobject('adodb.stream'), as.mode=3, as.type=2, as.charset='437', as.open, as.loadfromfile(v(0)), s=as.readtext(), as.close;
  4. s=s.replace(/[\r\n]+/g,'\r\n').replace(/\s*$/, '');
  5. as.open, as.writetext(s), as.savetofile(v(1),2), as.close, WSH.quit();
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:05 , Processed in 0.026905 second(s), 13 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表