Windows 10を使っていて突然コピーやペーストができなくなる不具合に遭遇した際に、コマンドプロンプトからクリップボードの中身をクリアする必要がありました。
具体的なコマンドの意味やコマンドプロンプト周りのTipsについて知りたい方に向けてこちらに情報を残しておきます。
今回の事例について
こちらの記事に記載した「Windows 10で突然クリップボードにコピー情報が格納されなくなる」症状の解決用コマンドです。
パソコン(OSはWindows 10)を使っていたら突然コピーやペーストができなくなってしまった時の対処法です。 症状 文字をコピーしてもクリップボードに格納されない。貼り付けを押しても何も貼り付けされない 文字列を選択し[…]
という流れでクリップボードの異常を解消しました。
具体的には
- Win+Rでファイル名を指定して実行 ダイアログを出す
- そこに「cmd /c echo.|clip」と入力してコマンド実行
という手順でクリップボードの中身を削除しました。以下、その手順で出てきたコマンドや各種Tipsについて情報を残します。
コマンドプロンプトの起動とコマンド実行を同時に
コマンドプロンプトは起動と同時に(オプション引数で)指定したコマンドを実行することができます。
1行のサクッと書けるコマンドであれば、「ファイル名を指定して実行」からcmd(コマンドプロンプト)のコマンドを直接実行するのがラクです。
cmd /c に続けて実行したいコマンドを入力すれば、(一度コマンドプロンプトを手動で開かなくても)すぐに当該コマンドを実行できます。
(cmd.exe にパラメータ /c を指定すると、後続のコマンドが実行された後にプロンプトが自動終了する。)
コマンドプロンプトの各種起動時オプションについては、こちらの公式ドキュメントが参考になります。
※Microsoftの公式ドキュメントは機械翻訳で日本語がおかしい部分もあるので、内容に不明な点が出てきた場合は右上の「英語で読む」ボタンを押して同ページの英語版に移動すると良いと思います。
echoコマンドで他プログラムに文字列を送る
echoコマンドの概要
今回コマンドプロンプトに渡したコマンドはこちらです。
echo は「入力(指定)した文字列をそのまま出力する」コマンドです。その名の通りエコー(やまびこ)。
と入力して実行すれば
こんにちは。にゃーん。
と次の行に表示されます。
これだけだと使いどころが意味不明かもしれませんが、echoは入力した文字を(プロンプト画面だけでなく)別のプログラム・コマンドに出力することもできます。
つまりechoコマンドを使ってclipコマンド(クリップボードに受け取った内容を格納するコマンド)に空の文字列を送れば、クリップボードの中身をクリアできます。
echoコマンドで空行を出力するには
echoコマンドの基本構文は次のとおりです。
echoの後に半角スペースを入れ、その後に出力したい文字列を指定します。
注目は「echoと出力したい文字列の間にある半角1文字は無視される仕様」です。(実は半角スペースでなくてもよい)
もし空文字を出力したい場合、適当に半角ドット「.」をechoの後に打って
とすれば、出力したい文字列が1文字も入力されていない状態なので空行が出力されます。
※echoの仕様で出力される文字には必ず改行が付加されるので、実際に出力されるのは空文字列ではなく空白行になる。
出力したい文字列を指定しない場合にわざわざ半角ドットを使用しましたが、これはこの場合に半角スペースが使えないためです。
echoの後ろがただの半角スペースだけだと、引数なしのecho:「"echo機能がONかOFFか確認する"コマンド」として解釈されてしまい空行を出力できません。
こういう細かい仕様について知りたい場合はMicrosoftの公式ドキュメントをご参照ください。
※これに限らず、各コマンドの詳細な仕様を確認するにはMicrosoftの公式ドキュメントを参照するのが手っ取り早いです。同ページの一番上にある検索ボックスで調べたいコマンドを入力すれば該当コマンドのドキュメントにアクセスできます。
echoの出力をclipコマンドに渡す
あるコマンドの出力を別のコマンドの入力に渡したい場合はパイプ「 | 」を使います。(キーボード右上角にある記号「バーティカルバー」)
という構文で、「1つ目のコマンドで出力した内容を2つ目のコマンドの入力にする」ことができます。
今回の場合は
なので、「echo.」で出力した内容(すなわち空白行)をclipコマンドの入力にしています。
clipコマンドは入力の文字列(データ)をクリップボードに格納するコマンドなので、空白行をクリップボードに格納することでクリップボードの中身を削除できます。
(以上がコマンドの流れ。)
その他情報
クリップボードの中身を削除するコマンドは他にもある
一応コマンドを説明しましたが、上記のコマンドでなくてもクリップボードの異常な中身を削除(上書き)できればなんでもいいはずなので例えば
をコマンドプロンプトで実行してもクリップボードの中身を削除することができそうです。(コマンドはあくまで一例)
クリップボード機能を担当する単体のサービスは無い?
クリップボードの異常によりコピー・ペーストができなくなった際「クリップボードのサービスを再起動すれば直るかも」と思ってサービスを探したのですが、どうやらクリップボード機能を担当する単体のサービスはなさそうです…。
こちらのサイト(英語フォーラムの機械日本語訳?)で、「クリップボード機能はWin32k.sysの不可欠な部分であり、クリップボードを担当するサービスはありません。」と記載されていたので無いのかも。
(私はこれ以上詳しく調べていないので、なにか情報をお持ちの方がいらっしゃれば教えて頂けるとありがたいです。)