やじうまの杜

Microsoftの中の人直伝! 「clip.exe」を覚えるとコマンドラインやWSLで便利だぞ

テキスト出力をクリップボードへポイ!……ただし、文字化けには注意

 「やじうまの杜」では、ニュース・レビューにこだわらない幅広い話題をお伝えします。

Microsoftの中の人直伝! 「clip.exe」を覚えるとコマンドラインやWSLで便利だぞ

 先日、Microsoftの中の人が紹介していたTipsが「reddit」でちょっと話題になっていました。コマンドラインで「clip.exe」へパイプする(渡す)と、出力を簡単にWindowsのクリップボードへコピーできるよ!……というワザです。たとえば、以下のコマンドを実行すると、システム情報を表示する「systeminfo」コマンドの結果がクリップボードに格納されます。

systeminfo | clip
「ターミナル」で上記のコマンドを実行して、[Ctrl]+[V]キーを押した様子

 ご存じの方はご存じでしょうが、知らなかった人はぜひ覚えて帰ってください!

 ただし、 「Windows PowerShell」(Windowsのみ対応)ではやらない こと。文字化けしてしまいます。かならず「PowerShell」(Windows/Mac/Linux対応)を利用してください。「コマンド プロンプト」(cmd.exe)を使っても構いません。

「Windows PowerShell」で実行すると文字化けする。回避策はあるが、面倒なので「PowerShell」か「コマンド プロンプト」を使いましょう

 このTipsが威力を発揮するのは、「Windows Subsystem for Linux」(WSL)環境で使うときでしょう。プラットフォームをまたいだデータの受け渡しはなにかにつけ面倒ですが、これなら以下のようにWSL/Linuxで出力されたテキストを、クリップボードを介して手軽にWindowsで受け取ることができます。

# WSLディストリビューションで実行すると、
# Windowsのクリップボードに「Hello! World」が格納される
echo "Hello! World" | clip.exe
「ターミナル」で上記のコマンドを実行して、[Ctrl]+[V]キーを押した様子

 ただし、日本語テキストを扱う際はここでも文字化けの問題がつきまといます。これは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
「uclip」ならば絵文字もOK。ただし、自分でインストールする必要があり、処理にも少し時間がかかる