标题: [文本处理] 求助:用批处理写一个批量去除文本文件标题之前的空格和空行。 [打印本页]
作者: 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
- rem 另存为 ANSI 编码 bat
- ' & cls & cscript.exe /nologo /e:vbscript "%~f0" %* & pause & exit /b
-
- folder = "." '指定一个文件夹
-
- Set oWshShell = CreateObject("WScript.Shell")
- Set oFSO = CreateObject("Scripting.FileSystemObject")
- folder = oFSO.GetAbsolutePathName(folder)
- oWshShell.CurrentDirectory = folder
- Set oStream = CreateObject("ADODB.Stream")
- oStream.Type = 2
- oStream.Mode = 3
- oStream.Charset = "GBK"
- Set oRegExp = New RegExp
- oRegExp.Global = False
- oRegExp.Pattern = "^[\s ]*?([^\s ])"
- For Each oFile In oFSO.GetFolder(folder).Files
- If LCase(Right(oFile.Path, 4)) = ".txt" Then
- wsh.Echo oFile.Path
- oStream.Open()
- oStream.LoadFromFile oFile.Path
- s = oStream.ReadText()
- s = oRegExp.Replace(s, "$1")
- oStream.Close()
- oStream.Open()
- oStream.WriteText s
- oStream.SaveToFile oFile.Path, 2
- oStream.Close()
- End If
- Next
- MsgBox "ok"
复制代码
作者: Batcher 时间: 2024-5-29 08:28
回复 1# gpfgpf
请选几个文件作为例子,打包压缩,上传到网盘,我试试。
作者: newswan 时间: 2024-5-29 08:50
试试- 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
- @echo off
- cd /d "%~dp0"
- for %%i in (*.txt) do (
- setlocal
- (for /f "tokens=1* delims=[]" %%a in ('find /n /v "" ^<"%%i"') do (
- for /f "tokens=*" %%x in ("%%b`") do (
- if "%%x" neq "`" (
- if defined m (
- echo=%%b
- ) else (
- for /f "tokens=*" %%y in ("%%b") do (
- echo=%%y
- )
- set m=1
- )
- ) else if defined m (
- echo=
- )
- )
- ))>$
- move $ "%%i"
- endlocal
- )
- pause
复制代码
作者: buyiyang 时间: 2024-5-29 21:59
- @echo off
- for /f "delims=" %%i in ('dir /a-d /b *.txt') do call :trimBlank "%%i"
- pause&exit
-
- :trimBlank
- for /f "usebackq tokens=*" %%i in (%1) do (
- set "title=%%i"
- goto :next
- )
- :next
- set /a n=0
- echo,正在处理文件:%~1
- (echo,%title%
- for /f "delims=[]" %%i in ('find /n "%title%" ^< %1') do @set /a n+=1,1/^(n-1^)2>nul||more +%%i %1
- )>"标题去空行空格_%~1"
复制代码
作者: aloha20200628 时间: 2024-5-30 01:08
本帖最后由 aloha20200628 于 2024-5-30 23:00 编辑
回复 9# gpfgpf
以下代码存为test.bat运行,逐个处理当前目录(包括子目录)中的*.txt源文件,生成与其对应的*.new.txt结果文件
已用9楼提供的两个示例文件("美酒歌后.txt","叶瑷菱.txt")测试通过...
- @set @v=1 /*
- @echo off & for /f "delims=" %%F in (' dir /b/s/a-d "*.txt" ') do (
- type "%%F"|cscript /b /e:jscript "%~f0">"%%~dpnF.new%%~xF"
- )
- exit/b */
- line=WSH.stdin.readall();
- line=line.replace(/(\r\n){3,}/,'').replace(/[ \t ]{2,}/g,'').replace(/\s+$/,'');
- 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
- @echo off
- for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
- set n=0
- (for /f "tokens=1* delims=:" %%j in ('findstr /n .* "%%i"') do (
- if defined n (
- if not "%%k"=="" (
- for /f "tokens=* delims= " %%l in ("%%k") do (
- echo,%%l
- set n=
- )
- )
- ) else (
- echo,%%k
- )
- ))>New_%%i
- )
- pause
复制代码
作者: gpfgpf 时间: 2024-6-2 23:27 标题: 求助:用批处理写一个批量去除文本文件标题之前的空格和空行。
感谢 aloha20200628和 qixiaobin0715两位大神,程序测试运行正常 ,佩服论坛高手真多。
作者: gpfgpf 时间: 2024-6-2 23:36
buyiyang大神的代码运行后,确实实现了标题去空行空格功能,但文本的内容也丢失了,所以,没意义。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |