Board logo

标题: [文本处理] 【已解决】批处理删除空白行 [打印本页]

作者: rockjean    时间: 2019-3-26 19:34     标题: 【已解决】批处理删除空白行

本帖最后由 rockjean 于 2019-3-27 19:45 编辑

有如下数据:
  1. 批处理之家的大神们 都是好人 技术都过硬
  2. 批处理之家的大神们 都是好人 技术都过硬
  3. 批处理之家的大神们 都是好人 技术都过硬
  4. 批处理之家的大神们 都是好人 技术都过硬
  5. 批处理之家的大神们 都是好人 技术都过硬
  6. 批处理之家的大神们 都是好人 技术都过硬
复制代码
请问用批处理怎么把里面的空白行删掉呢?
作者: 惆怅而又凄凉    时间: 2019-3-26 20:22

回复 1# rockjean


没完全明白你的需求,你是要删除指定txt文件内的空白行还是要删除一些指定文件内或者是文件夹下所有文件的的空白行?
作者: 惆怅而又凄凉    时间: 2019-3-26 20:25

http://www.bathome.net/viewthread.php?tid=26881&page=1

善用搜索
作者: ivor    时间: 2019-3-26 20:25

  1. (gc test.txt) | ? {$_.trim() -ne "" }
复制代码

作者: 惆怅而又凄凉    时间: 2019-3-26 20:25

http://www.bathome.net/thread-40611-1-1.html
作者: rockjean    时间: 2019-3-26 20:27

回复 2# 惆怅而又凄凉


    比如一个文件夹下面有一堆文本文件:01.txt, 02.txt, 03.txt, ... 100.txt,
这些文本都有如上描述的空白行,我想删掉空白行,但文件名不变。
作者: xczxczxcz    时间: 2019-3-26 20:57

回复 6# rockjean

写出来你不一定能用。
  1. @Echo Off & CD /d "%~dp0"
  2. Powershell -execution remotesigned ls *.txt^|%%{sc $_ -value $((gc $_) -notmatch '^^$') -force};
复制代码

作者: 523066680    时间: 2019-3-26 21:06

我记得for默认就会吞掉空行,
  1. @echo off
  2. (for /f "tokens=*" %%a in (src.txt) do echo %%a)>dst.txt
复制代码

作者: xczxczxcz    时间: 2019-3-26 21:17

回复 8# 523066680

for 是有默认过滤空行的。楼主还要保存原来的文件名,数量多。写起来不如PS简单。
作者: 523066680    时间: 2019-3-26 21:23

回复 9# xczxczxcz

    哦,只要不用批处理,海阔天空
作者: cutebe    时间: 2019-3-26 21:35

::下载第三方sed.exe
sed -i "/^$/d" a.txt
作者: yhcfsr    时间: 2019-3-26 21:51

  1. @echo off
  2. for /f "delims=" %%a in ('dir /a-d/s/b *.txt') do (
  3. (for /f "delims=" %%b in ('type "%%a"') do echo;%%b)>tmp
  4. move tmp "%%a"
  5. )
复制代码

作者: Batcher    时间: 2019-3-26 21:51

  1. @echo off
  2. for /f "delims=" %%a in ('dir /b /a-d *.txt') do (
  3.     (for /f "tokens=*" %%b in ('type "%%a"') do (
  4.         echo,%%b
  5.     ))>"%%a.tmp"
  6.     move /y "%%a.tmp" "%%a"
  7. )
复制代码

作者: rockjean    时间: 2019-3-27 18:22

回复 4# ivor


    虽然看不懂,还是感谢~
作者: rockjean    时间: 2019-3-27 18:23

回复 9# xczxczxcz


    关键是不会PowerShell
作者: rockjean    时间: 2019-3-27 18:24

回复 10# 523066680


    打扰了~
作者: rockjean    时间: 2019-3-27 18:53

回复 13# Batcher


    为什么要执行两次才可以去掉空白行?
作者: Batcher    时间: 2019-3-27 19:48

回复 17# rockjean


    把你测试用的txt和bat打包压缩传上来我试试
作者: rockjean    时间: 2019-3-27 19:53

回复 18# Batcher


    我的文本数据是从电子表格里复制过来的,
用notepad++打开看,其实每个空行前面有个tab空白符,
用您的代码撸第一遍,tab空白符不见了,但空行还在,撸第二次就达到效果了。
所以我再加一层循环就可以了:
for /l %%a in (1,1,2) do (
您的代码
)
再次感谢Batcher大神!祝您今天愉快~
作者: rockjean    时间: 2020-5-27 09:51

没想到这么久的时间过去了,使用此方法的机会并不多,愧对答题者。
作者: rockjean    时间: 2020-5-27 09:58

回复 18# Batcher


    bather大神,我看到大神的个性签名网址,可以直接点击访问,我的要怎么弄,才能变成这样子呢?现在只显示网址,没有超链接。




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