标题: [文本处理] 求BAT脚本能删除目录里txt文件里文字最后空行 [打印本页]
作者: dzwind 时间: 2024-5-9 17:03 标题: 求BAT脚本能删除目录里txt文件里文字最后空行
求教高手帮助制作一个BAT,要求拖动文件夹到目标BAT程序上,运用会删除文件夹下所有TXT内文字以后的空行。
作者: aloha20200628 时间: 2024-5-9 18:44
本帖最后由 aloha20200628 于 2024-5-9 21:12 编辑
回复 1# dzwind
代码存为test.bat运行。
若要保留源文件*.txt,可删除第5行代码,其结果是在源文件目录中生成删除源文件末尾空行的新文件 *.new.txt- @set @v=1 /*
- @echo off
- if "%~1" neq "" for /f "delims=" %%F in (' dir /b/s/a-d "%~1\*.txt" ') do (
- cscript /e:jscript "%~f0" "%%~F" "%%~dpnF.new%%~xF"
- move /y "%%~dpnF.new%%~xF" "%%~F">nul
- )
- pause&exit/b
- */
- v=WSH.arguments, as=WSH.createobject('adodb.stream');
- as.mode=3, as.type=2, as.charset='437', as.open, as.loadfromfile(v(0));
- alllines=as.readtext().split('\r\n'), as.close;
- for (; alllines.slice(-1)==''; alllines.pop()); //删除末尾1-n个空行
- as.open, as.writetext(alllines.join('\r\n'));
- as.savetofile(v(1),2), as.close; WSH.quit();
复制代码
作者: 77七 时间: 2024-5-9 19:32
- @echo off
- cd /d "%~1" || exit
- for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
- setlocal
- (for /f "tokens=1* delims=[]" %%a in ('find /n /v "" ^<"%%i"') do (
- if "%%b" equ "" (
- set /a n+=1
- ) else (
- if defined n (
- setlocal enabledelayedexpansion
- for /l %%l in (1,1,!n!) do (
- echo=
- )
- endlocal
- set n=
- )
- echo=%%b
- )
- ))>$
- move $ "%%i"
- endlocal
- )
- pause
复制代码
作者: aloha20200628 时间: 2024-5-9 21:08
本帖最后由 aloha20200628 于 2024-5-9 21:12 编辑
回复 1# dzwind
用本论坛第三方下载的gawk.exe (http://bcn.bathome.net/s/tool/index.html?key=gawk) 可使批处理代码大为简化,但其只能删除文件最后一个空行,如须删除文件末尾多个连续空行,可用2楼代码...
若要保留源文件*.txt,可删除第4行代码,其结果是在源文件目录中生成删除源文件末尾空行的新文件 *.new.txt- @echo off
- if "%~1" neq "" for /f "delims=" %%F in (' dir /b/s/a-d "%~1\*.txt" ') do (
- gawk "NR>1{print p}{p=$0}END{printf $0}" "%%~F">"%%~dpnF.new%%~xF"
- move /y "%%~dpnF.new%%~xF" "%%~F">nul
- )
- pause&exit/b
复制代码
作者: dzwind 时间: 2024-5-10 09:05
作者: dzwind 时间: 2024-5-10 21:24
回复 2# aloha20200628
大师,您能否在2楼的句子上再给添加一个删除多余空格的句子。因为有的TXT文件里的内容最后面不仅有多余的空行,还有还有多余的空格,有的还有多行空行及空格。谢谢。
作者: aloha20200628 时间: 2024-5-10 22:26
回复 6# dzwind
删除文件末尾连续的空白字符(包括空格/制表符/换行符)- @set @v=1 /*
- @echo off
- if "%~1" neq "" for /f "delims=" %%F in (' dir /b/s/a-d "%~1\*.txt" ') do (
- cscript /e:jscript "%~f0" "%%~F" "%%~dpnF.new%%~xF"
- move /y "%%~dpnF.new%%~xF" "%%~F">nul
- )
- pause&exit/b
- */
- 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, s=s.replace(/\s*$/, '');
- as.open, as.writetext(s), as.savetofile(v(1),2), as.close, WSH.quit();
复制代码
作者: hfxiang 时间: 2024-5-11 09:32
回复 6# dzwind
这个用第3方工具sed( http://bcn.bathome.net/tool/4.9/sed.exe )的实现脚本如下:- @echo off
- if "%~1" neq "" for /f "delims=" %%A in ('dir /b/s/a-d "%~1\*.txt"') do (
- sed -i -z "/[ \t\n]*$/s///" "%%~A"
- )
复制代码
作者: dzwind 时间: 2024-5-11 09:54
再次感谢!!!!
作者: 娜美 时间: 2024-5-11 13:31
- @echo off
- for /r %%a in (*.txt) do (
- grep -Pv "^$" "%%a"
- ) >%%a.tmp
- pause
复制代码
- @echo off
- for /r %%a in (*.txt) do (
- gawk "!/^$/" "%%a"
- ) >%%a.tmp
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |