WindowsのBatch(cmd)/PowerShellでファイルの空行を削除する

以前、LinuxやMacのコンソール上での空行削除についてまとめたが、Windowsではどうするのだろう?と思ったので、少し調べてみた。
さすがにLinuxやMacほど応用は効かないしわかりにくい、タイピングしにくい…LinuxやUNIXに慣れてるとかなり扱いづらいけど、とりあえず実現はできるようだ。

1.Batch(cmd)でファイルのすべての空行を削除する

Batch(コマンドプロンプト)でファイルのすべての空行を削除する場合、以下のようにする。

findstr /v /r /c:"^\ *$" 対象ファイル

C:\Users\test>type blank_test.txt
123

456

789

C:\Users\test>findstr /v /r /c:"^\ *$" blank_test.txt
123
456
789

2.PowerShellでファイルのすべての空行を削除する

PowerShellでファイルのすべての空行を削除する場合、以下のようにする。

(gc ファイル) | ? {$_.trim() -ne "" }

PS C:\Users\test> type .\blank_test.txt
123

456

789
PS C:\Users\test> (gc blank_test.txt) | ? {$_.trim() -ne "" }
123
456
789

Batchだと末尾の空行が削除できないことを考えると、PowerShellでやったほうがよさそう。
なお、PowerShellの場合は空白やタブを含んでいてもこれで削除してくれるので、結構シンプルに書ける。