PowerShell ワンライナー集:便利なパイプライン活用例まとめ

コンピュータ

PowerShellのパイプラインはコマンドレット間でオブジェクトを渡す仕組みで、各オブジェクトで処理を組み合わせることで、複雑な処理流れを1行で表現することが出来ます。
エクスプローラなどでファイルを操作する場合など、手作業で行うことに比べて作業時間を短縮します。

重複ファイルを削除するワンライナー

Get-ChildItem *.png | Group-Object { (Get-FileHash $_.FullName -Algorithm MD5).Hash } | Where-Object { $_.Count -gt 1 } | ForEach-Object { $_.Group | Select-Object -Skip 1 } | Remove-Item -WhatIf

結果

What if: Performing the operation "Remove File" on target "F:\deinoji04\ScreenShot\スクリーンショット (223).png".
What if: Performing the operation "Remove File" on target "F:\deinoji04\ScreenShot\スクリーンショット (316).png".

表示されたファイルをエクスプローラーで確認後削除。ワンライナーで削除まで行いたい場合は最後の-WhatIfを削除してください。

画像ファイルをトリミングするワンライナー

カレントディレクトリ内の.png 画像を 座標 (36, 0) を起点に 幅1127 x 高さ1600 の範囲でトリミングし、ファイル名の末尾に_cropを加えて出力。

Add-Type -AssemblyName System.Drawing; Get-ChildItem *.png | ForEach-Object { $img=[System.Drawing.Image]::FromFile($_.FullName); $cropRect=New-Object System.Drawing.Rectangle 36,0,1127,1600; $bmp=New-Object System.Drawing.Bitmap $cropRect.Width, $cropRect.Height; $g=[System.Drawing.Graphics]::FromImage($bmp); $g.DrawImage($img, (New-Object System.Drawing.Rectangle 0,0,$cropRect.Width,$cropRect.Height), $cropRect, [System.Drawing.GraphicsUnit]::Pixel); $bmp.Save("$($_.BaseName)_crop.png"); $img.Dispose(); $g.Dispose(); $bmp.Dispose() }

.NETを使う場合はワンライナーでは厳しいですね。

ファイル名を連番でリネームするワンライナー

ファイル名のsuffixを削除してくれるワンライナー

パスに含まれる円記号とスラッシュ記号を変換するワンライナー

画像ファイルをjpg形式からpng形式に一括変換するワンライナー

.ps1ファイルの一覧と内容の先頭部分を表示するワンライナー

コメント