[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

文件编码能确定吗
如果要考虑不同的编码就有点啰嗦了

QQ 20147578

TOP

文件编码能确定ANSI,不用考虑不同的编码。

TOP

什么是标题
怎么才算是标题

TOP

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

QQ 20147578

TOP

回复 1# gpfgpf


    请选几个文件作为例子,打包压缩,上传到网盘,我试试。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

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

TOP

至少要给个标题和文本的示例,你这标题的概念太范了

TOP

文本例子:

链接: https://pan.baidu.com/s/1Uf4QIV5T1WICLpyWyyp7mg?pwd=9309 提取码: 9309 复制这段内容后打开百度网盘手机App,操作更方便哦

TOP

本帖最后由 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
复制代码
bat小白,请多指教!谢谢!

TOP

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

TOP

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

TOP

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

感谢几位大神的帮助,其中czjt1234和77七两位大神的程序最为完美,aloha20200628大咖的程序会提示有版权,buyiyang大咖的程序新建的文本是空文本,需要改进。

TOP

回复 13# gpfgpf


    我的代码拿你的样本测试了没有问题,12楼的代码可以在 cscript 后加个 -nologo 参数隐藏WSH版本标识。

TOP

回复 13# gpfgpf

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

TOP

返回列表