Board logo

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

作者: gpfgpf    时间: 2024-5-28 20:31     标题: 求助:用批处理写一个批量去除文本文件标题之前的空格和空行。

以前下载的txt文本文件,准备整理一下,单个文本文件的标题前面有空格和空行,如何一次批量全部去除这些空格和空行,标题后面的空格和空行不用处理,空格有可能是半角和全角空格,谢谢大神帮忙看看能不能实现这个功能。
作者: czjt1234    时间: 2024-5-28 20:37

文件编码能确定吗
如果要考虑不同的编码就有点啰嗦了
作者: gpfgpf    时间: 2024-5-28 20:51

文件编码能确定ANSI,不用考虑不同的编码。
作者: Five66    时间: 2024-5-29 01:32

什么是标题
怎么才算是标题
作者: czjt1234    时间: 2024-5-29 05:24

  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"
复制代码

作者: Batcher    时间: 2024-5-29 08:28

回复 1# gpfgpf


    请选几个文件作为例子,打包压缩,上传到网盘,我试试。
作者: newswan    时间: 2024-5-29 08:50

试试
  1. sed '/\w/,$!d' filename > newfilename
复制代码

作者: holley    时间: 2024-5-29 08:51

至少要给个标题和文本的示例,你这标题的概念太范了
作者: gpfgpf    时间: 2024-5-29 20:00

文本例子:

链接: https://pan.baidu.com/s/1Uf4QIV5T1WICLpyWyyp7mg?pwd=9309 提取码: 9309 复制这段内容后打开百度网盘手机App,操作更方便哦
作者: 77七    时间: 2024-5-29 20:57

本帖最后由 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
复制代码

作者: buyiyang    时间: 2024-5-29 21:59

  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"
复制代码

作者: aloha20200628    时间: 2024-5-30 01:08

本帖最后由 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();
复制代码

作者: gpfgpf    时间: 2024-5-30 22:00     标题: RE: [已解决]求助:用批处理写一个批量去除文本文件标题之前的空格和空行。

感谢几位大神的帮助,其中czjt1234和77七两位大神的程序最为完美,aloha20200628大咖的程序会提示有版权,buyiyang大咖的程序新建的文本是空文本,需要改进。
作者: buyiyang    时间: 2024-5-30 22:20

回复 13# gpfgpf


    我的代码拿你的样本测试了没有问题,12楼的代码可以在 cscript 后加个 -nologo 参数隐藏WSH版本标识。
作者: aloha20200628    时间: 2024-5-30 22:59

回复 13# gpfgpf

好吧...订正了12楼代码》关闭了cscript进程报告

作者: qixiaobin0715    时间: 2024-5-31 09:10

  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  3.     set n=0
  4.     (for /f "tokens=1* delims=:" %%j in ('findstr /n .* "%%i"') do (
  5.         if defined n (
  6.             if not "%%k"=="" (
  7.                 for /f "tokens=* delims=  " %%l in ("%%k") do (
  8.                     echo,%%l
  9.                     set n=
  10.                 )
  11.             )
  12.         ) else (
  13.             echo,%%k
  14.         )
  15.     ))>New_%%i
  16. )
  17. pause
复制代码

作者: gpfgpf    时间: 2024-6-2 23:27     标题: 求助:用批处理写一个批量去除文本文件标题之前的空格和空行。

感谢 aloha20200628和 qixiaobin0715两位大神,程序测试运行正常 ,佩服论坛高手真多。
作者: gpfgpf    时间: 2024-6-2 23:36

buyiyang大神的代码运行后,确实实现了标题去空行空格功能,但文本的内容也丢失了,所以,没意义。




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