Powershellでクリップボードを操作するサンプル

PoweShell コンピュータ
PowerShell

ちょっとした処理でもコードが長くなりがちなPowershellですが、クリップボードには簡単にアクセス出来るようです。
クリップボードへ文字列の出力とクリップボードから文字列を取り出すだけの面白味にかけるサンプルを作ってみました。

サンプルスクリプト

# クリップボードへ出力
"こんにちは" | clip

# クリップボードから文字列を取り出し
Get-Clipboard -Format Text

結果

clipへリダイレクトした文字列がGet-Clipboardで取り出されます。

使い道として、スクリプトの結果をclipへリダイレクトすることで色々なGUIアプリケーションに貼り付けることが出来ます。逆にGUIアプリケーションの文字列をコピーしスクリプトでGet-Clipboardを実行することで文字列を引き渡すことが出来ます。基本CUIなpowersehllですが、クリップボードを経由することでGUIアプリとの文字列の受け渡しをする事が可能となります。

もう少し具体的なサンプル

CSV形式のデータをコピーしExcelに貼り付けると1つのセルにCSVの1行分のデータが貼りつくことになります。

"日付","品物","数量","単価"
2019/11/01,"リンゴ",10,300
2019/11/02,"みかん",3,100
2019/11/04,"ドリアン",5,900


Excelに貼り付ける前にpowersehll.exeで以下のコマンド実行します。

Get-Clipboard -Format Text | % { $_.Replace(",","`t") } | clip

実行後Excelに貼り付けるとCSVの各項目がExcelのセルに綺麗に収まります。

素直にCSVファイルに保存してExcelで読み込めば良いので実用的では無いですし、カンマをタブに変換する方法がこのreplaceだと色々まずいのです。

もう少し現実的な使い道

CSV形式ほどかっちりしたフォーマットでは無くとも、ある程度規則性のある文字列の並びが多量にあり、それをExcelなどのアプリケーションで利用したい場合があります。たとえば住所を都道府県、市区町村とそれ以降の3つに分けたい場合、一般的なテキストエディタの文字の置き換え機能では手に余ります。

以下の住所をコピーします。

北海道美馬郡ほろの町江戸前3-2
東京都滝沢市飯野田町十条1-3
沖縄県奈波市井熊町羅同村北812-2
大阪府西東北区白浜112-2

以下のコードをpowershell.exeで実行します。

Get-Clipboard -Format Text | % {$m=[regex]::Match($_, "^(.*?[都道府県])(.*?[市区町村])(.*)$"); $m.Groups[1].Value+"`t"+$m.Groups[2].Value+"`t"+$m.Groups[3].Value } | clip

Excelに貼り付けます。

まとめ

クリップボードを使うことでPowershellスクリプトとアプリケーション間で文字列の授受が手軽に出来るようになり、特にワンライナーで文字の置き換えをする場面で活躍しそうです。

コメント