やじうまの杜
Microsoftの中の人直伝! 「clip.exe」を覚えるとコマンドラインやWSLで便利だぞ
テキスト出力をクリップボードへポイ!……ただし、文字化けには注意
2024年8月1日 13:41
「やじうまの杜」では、ニュース・レビューにこだわらない幅広い話題をお伝えします。
先日、Microsoftの中の人が紹介していたTipsが「reddit」でちょっと話題になっていました。コマンドラインで「clip.exe」へパイプする(渡す)と、出力を簡単にWindowsのクリップボードへコピーできるよ!……というワザです。たとえば、以下のコマンドを実行すると、システム情報を表示する「systeminfo」コマンドの結果がクリップボードに格納されます。
systeminfo | clip
ご存じの方はご存じでしょうが、知らなかった人はぜひ覚えて帰ってください!
ただし、 「Windows PowerShell」(Windowsのみ対応)ではやらない こと。文字化けしてしまいます。かならず「PowerShell」(Windows/Mac/Linux対応)を利用してください。「コマンド プロンプト」(cmd.exe)を使っても構いません。
このTipsが威力を発揮するのは、「Windows Subsystem for Linux」(WSL)環境で使うときでしょう。プラットフォームをまたいだデータの受け渡しはなにかにつけ面倒ですが、これなら以下のようにWSL/Linuxで出力されたテキストを、クリップボードを介して手軽にWindowsで受け取ることができます。
# WSLディストリビューションで実行すると、
# Windowsのクリップボードに「Hello! World」が格納される
echo "Hello! World" | clip.exe
ただし、日本語テキストを扱う際はここでも文字化けの問題がつきまといます。これはLinuxで扱うテキストがUnicodeであるにもかかわらず、日本語版Windowsがコマンドラインで扱うテキストがShift_JISであるためです。扱う文字コードに齟齬があります。
これを防ぐには、ちょっとひと手間かかりますが、文字コードの変換処理を間に挟んであげます。
# 文字化け
echo "窓の杜" | clip.exe
# OK
echo "窓の杜" | iconv -t cp932 | clip.exe
脱線するので詳細は省きますが、「iconv」は文字コードを変換するツール、「cp932」は日本語版Windowsが利用する文字コード(コードページ)です。単純にUnicodeをShift_JISへ変換していると考えてください。
「コードページの番号を覚えるのは面倒だなぁ」「コマンドが長くなるのはだるいよ」という方は、有志の方が開発した「uclip」を活用するとよいでしょう。実は先ほどの文字コード変換処理は絵文字に対応していないのですが(「cp932」の範囲外であるため)、「uclip」ならばそうした文字も扱えます。
# エラー
echo "窓の杜💛" | iconv -t cp932 | clip.exe
# OK
echo "窓の杜💛" | ./uclip.exe