powershell

PowerShell 改行コードをワンライナーで変換する

指定ファイルの改行コードを変更する

以下は読み込みファイル名(sjis_crlf.txt)と出力ファイル名を同じにしているので、結果自身のファイルの改行コードを変更する事になっています。この時ポイントはGet-Contentを丸かっこで囲んでいる点です。パイプは通常左辺を実行しつつその結果を右辺に流すイメージですが括弧で左辺を囲む事で評価順番が変わり『一旦全てINPUTファイルが全てメモリに読まれる』ため、「読みながら自身を更新する」事が可能になるのだとおもいます。

V5.1の環境
# 赤()を外すと以下のようなエラーとなり自身のファイルの書き換えができません
# Set-Content : 別のプロセスで使用されているため、XXXXX にアクセスできません。
#
(Get-Content .\sjis_crlf.txt  -Encoding default) | % { $_ + "`n" } | Set-Content -LiteralPath .\sjis_crlf.txt -NoNewline  -Encoding default
V7.2の環境

V7.2の環境(V6以降との事)では encodingのデフォルトが「utf8NoBOM」になっているので、今回のケースだとshift_jisを明示的に指定する事になります。

(Get-Content .\sjis_crlf.txt  -Encoding shift_jis) | % { $_ + "`n" } | Set-Content -LiteralPath .\sjis_lf.txt -NoNewline  -Encoding shift_jis
Shift-JISファイルの改行コードをLFに変更する

上記に従いバージョンによってはencodingは適宜変更して使ってください。

(Get-Content .\sjis_crlf.txt  -encoding default) | % { $_ + "`n" } | Set-Content -LiteralPath .\sjis_crlf.txt -NoNewline  -encoding default
Shift-JISファイルの改行コードをCRLFに変更する

上記に従いバージョンによってはencodingは適宜変更して使ってください。

(Get-Content .\sjis_crlf.txt  -encoding default) | % { $_ + "`r`n" } | Set-Content -LiteralPath .\sjis_crlf.txt -NoNewline  -encoding default

フォルダ内ワイルドカード指定ファイル全ての改行コードを変更する

以下はShift-JIS想定のファイルですが、2か所のencodingは忘れず変更して使ってください。(ちなみにutf-8の場合はUTF8です)

LFに変更する場合
ls *.txt |  % { (get-content -encoding Default $_.FullName) | % { $_ + "`n" } | Set-Content -LiteralPath $_.FullName -NoNewline  -Encoding default }
CRLFに変更する場合
ls *.txt |  % { (get-content -encoding Default $_.FullName) | % { $_ + "`r`n" } | Set-Content -LiteralPath $_.FullName -NoNewline  -Encoding default }
スポンサーリンク
コピペで使う