使用批处理从文本文件中删除空行

时间:2017-11-09 19:58:06

标签: powershell batch-file

最近问题发布在stackoverflow上,我有一个类似于J. Williams的问题,除了我只需要删除空行(删除空格不会伤害程序,但它不是必须的)。当我尝试他的原始以及解决方案compo给它只清除文件而不是删除额外的行。我在批处理文件中单独使用它。

实施例: 我需要这个:

Joe
Bob
Mark
Frank

Dutch
(blank line here too)

成为这个:

Joe
Bob
Mark
Frank
Dutch

我也可以将这样的解决方案附加到此PowerShell脚本上,因为它正在给我一些空白:(Get-Content friends.txt) | Where-Object {$_ -notmatch "\bJoe\b"} | Set-Content friends.txt感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

如果它是一个相对较小的文件:

(Get-Content $infile) -match '\S' | Set-Content $infile

如果它太大而无法一次读入内存:

Get-Content $infile -ReadCount 1000 |
 ForeachObject {
  $_ -match '\S' |
  Add-Content $outfile
 }

答案 1 :(得分:2)

这应该对你有用 - 简而言之,它会读取文件的所有行,然后只将带有内容的行回写到文件中。




  $ friends = Get-Content friends.txt
 $ friends | Where-Object {$ _} | Set-Content friends.txt
  



答案 2 :(得分:0)

另一种PowerShell方法是使用正则表达式Select-String使用.+ cmdlet,这意味着任何一个或多个字符。此外,如果使用Set-Content,请务必使用-NoNewLine参数来防止最后出现不需要的空白行。 (需要PS5 +)

Select-String -Path C:\example.txt -Pattern '.+' |
    Select-Object -ExpandProperty line |
    Set-Content C:\exampleoutput.txt -NoNewline