最近问题发布在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
感谢您的帮助。
答案 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