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

[文本处理] 求助:用批处理写一个批量去除文本文件标题之前的空格和空行。

[复制链接]
发表于 2024-5-28 20:31:49 | 显示全部楼层 |阅读模式
以前下载的txt文本文件,准备整理一下,单个文本文件的标题前面有空格和空行,如何一次批量全部去除这些空格和空行,标题后面的空格和空行不用处理,空格有可能是半角和全角空格,谢谢大神帮忙看看能不能实现这个功能。
发表于 2024-5-28 20:37:54 | 显示全部楼层
文件编码能确定吗
如果要考虑不同的编码就有点啰嗦了
 楼主| 发表于 2024-5-28 20:51:55 | 显示全部楼层
文件编码能确定ANSI,不用考虑不同的编码。
发表于 2024-5-29 01:32:40 | 显示全部楼层
什么是标题
怎么才算是标题
发表于 2024-5-29 05:24:06 | 显示全部楼层
  1. rem 另存为 ANSI 编码 bat
  2. ' & cls & cscript.exe /nologo /e:vbscript "%~f0" %* & pause & exit /b

  3. folder = "."      '指定一个文件夹

  4. Set oWshShell = CreateObject("WScript.Shell")
  5. Set oFSO = CreateObject("Scripting.FileSystemObject")
  6. folder = oFSO.GetAbsolutePathName(folder)
  7. oWshShell.CurrentDirectory = folder
  8. Set oStream = CreateObject("ADODB.Stream")
  9. oStream.Type = 2
  10. oStream.Mode = 3
  11. oStream.Charset = "GBK"
  12. Set oRegExp = New RegExp
  13. oRegExp.Global = False
  14. oRegExp.Pattern = "^[\s ]*?([^\s ])"
  15. For Each oFile In oFSO.GetFolder(folder).Files
  16.     If LCase(Right(oFile.Path, 4)) = ".txt" Then
  17.         wsh.Echo oFile.Path
  18.         oStream.Open()
  19.         oStream.LoadFromFile oFile.Path
  20.         s = oStream.ReadText()
  21.         s = oRegExp.Replace(s, "$1")
  22.         oStream.Close()
  23.         oStream.Open()
  24.         oStream.WriteText s
  25.         oStream.SaveToFile oFile.Path, 2
  26.         oStream.Close()
  27.     End If
  28. Next
  29. MsgBox "ok"
复制代码
发表于 2024-5-29 08:28:33 | 显示全部楼层
回复 1# gpfgpf


    请选几个文件作为例子,打包压缩,上传到网盘,我试试。
发表于 2024-5-29 08:50:47 | 显示全部楼层
试试


  1. sed '/\w/,$!d' filename > newfilename

复制代码
发表于 2024-5-29 08:51:17 | 显示全部楼层
至少要给个标题和文本的示例,你这标题的概念太范了
 楼主| 发表于 2024-5-29 20:00:29 | 显示全部楼层
文本例子:

链接: https://pan.baidu.com/s/1Uf4QIV5T1WICLpyWyyp7mg?pwd=9309 提取码: 9309 复制这段内容后打开百度网盘手机App,操作更方便哦
发表于 2024-5-29 20:57:00 | 显示全部楼层
本帖最后由 77七 于 2024-5-29 20:58 编辑

回复 9# gpfgpf


  1. @echo off
  2. cd /d "%~dp0"
  3. for %%i in (*.txt) do (
  4.         setlocal
  5.         (for /f "tokens=1* delims=[]" %%a in ('find /n /v "" ^<"%%i"') do (
  6.                 for /f "tokens=*" %%x in ("%%b`") do (
  7.                         if "%%x" neq "`" (
  8.                                 if defined m (
  9.                                         echo=%%b
  10.                                 ) else (
  11.                                         for /f "tokens=*" %%y in ("%%b") do (
  12.                                                 echo=%%y
  13.                                         )
  14.                                         set m=1
  15.                                 )
  16.                         ) else if defined m (
  17.                                 echo=
  18.                         )
  19.                 )
  20.         ))>$
  21.         move $ "%%i"
  22.         endlocal
  23. )
  24. pause
复制代码
发表于 2024-5-29 21:59:48 | 显示全部楼层
  1. @echo off
  2. for /f "delims=" %%i in ('dir /a-d /b *.txt') do call :trimBlank "%%i"
  3. pause&exit

  4. :trimBlank
  5. for /f "usebackq tokens=*" %%i in (%1) do (
  6.     set "title=%%i"
  7.     goto :next
  8.     )
  9. :next
  10. set /a n=0
  11. echo,正在处理文件:%~1
  12. (echo,%title%
  13. for /f "delims=[]" %%i in ('find /n "%title%" ^< %1') do @set /a n+=1,1/^(n-1^)2>nul||more +%%i %1
  14. )>"标题去空行空格_%~1"
复制代码
发表于 2024-5-30 01:08:59 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-5-30 23:00 编辑

回复 9# gpfgpf

以下代码存为test.bat运行,逐个处理当前目录(包括子目录)中的*.txt源文件,生成与其对应的*.new.txt结果文件
已用9楼提供的两个示例文件("美酒歌后.txt","叶瑷菱.txt")测试通过...

  1. @set @v=1 /*
  2. @echo off & for /f "delims=" %%F in (' dir /b/s/a-d "*.txt" ') do (
  3.         type "%%F"|cscript /b /e:jscript "%~f0">"%%~dpnF.new%%~xF"
  4. )
  5. exit/b */
  6. line=WSH.stdin.readall();
  7. line=line.replace(/(\r\n){3,}/,'').replace(/[ \t ]{2,}/g,'').replace(/\s+$/,'');
  8. WSH.stdout.write(line); WSH.quit();
复制代码
 楼主| 发表于 2024-5-30 22:00:50 | 显示全部楼层

RE: [已解决]求助:用批处理写一个批量去除文本文件标题之前的空格和空行。

感谢几位大神的帮助,其中czjt1234和77七两位大神的程序最为完美,aloha20200628大咖的程序会提示有版权,buyiyang大咖的程序新建的文本是空文本,需要改进。
发表于 2024-5-30 22:20:09 | 显示全部楼层
回复 13# gpfgpf


    我的代码拿你的样本测试了没有问题,12楼的代码可以在 cscript 后加个 -nologo 参数隐藏WSH版本标识。
发表于 2024-5-30 22:59:51 | 显示全部楼层
回复 13# gpfgpf

好吧...订正了12楼代码》关闭了cscript进程报告
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 01:16 , Processed in 0.022902 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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