ライブラリアン・コラム

コマンドプロンプトを使ってみよう

今満 亨崇

2022年8月

はじめに

仕事を楽にするための汎用的な手段は、PCの使い方に精通することだろう。書店でも、インターネットでも、PCを使いこなすための様々な小技や便利機能の情報があふれている。本記事も、そういった情報の一つである。コマンドプロンプトを対象として、筆者が業務のなかで使用したコマンドを紹介したい。

コマンドプロンプトは、WindowsをCUI(Character User Interface)で操作できるツールである。アニメやドラマなどでハッカーが操作する、黒背景に白文字の画面といえばイメージできるだろうか。一般的にあまり利用されていないが、Windowsの標準環境で必ず使用できる、たいへん便利なツールである。

コマンドプロンプトの起動とディレクトリの移動

まずはコマンドプロンプトを起動してみよう。Windowsキーを押下して、”cmd”と入力すると、一覧の最上部に”コマンドプロンプト”が表示される(図1左)。この状態でEnterキーを押下するか、左クリックするとコマンドプロンプトが起動する。

もしくはWindowsキー+rを押下すると”ファイル名を指定して実行”のウインドウが表示されるので、ここに”cmd”と入力して”OK”を押下してもよい(図1右)。

図1 コマンドプロンプトの起動

図1 コマンドプロンプトの起動

コマンドプロンプトでは、PCに対する様々な命令を入力することができる。例えばメモ帳を起動させる場合、マウスを操作してメモ帳のアイコンをダブルクリックすることが多いだろう。コマンドプロンプト上で”notepad”と入力し、Enterキーを押下しても同様に、メモ帳を起動させることができる。

さて、起動したばかりのコマンドプロンプトは、ホームディレクトリを参照している(ホームディレクトリはユーザ毎に異なる)。図2では①の表示となっており、”C:\Users\Imamitsu”が参照されていることになる。

これを、操作したいファイルがあるディレクトリを参照するように変更しよう。今回のコラム執筆にあたり筆者は、デスクトップに”ライブラリアンコラム”というディレクトリを作成し、そこにいくつかファイルを保存している(図2下)。ここを参照させるためには、”cd C:\Users\Imamitsu\Desktop\ライブラリアンコラム”と入力する(図2②)。全部手入力してもよいが、それは面倒なので、”cd “と入力し(cdの次の半角スペースも忘れずに入力すること)、③に表示されている”C:\”から始まるパスをコピーし、コマンドプロンプト上で右クリックをする。するとパスが貼り付けされるので、この状態でEnterキーを押下する。すると、④の状態となり、参照しているディレクトリが変更されたことが分かる。

図2 コマンドプロンプト(上)とエクスプローラー(下)の画面

図2 コマンドプロンプト(上)とエクスプローラー(下)の画面
コマンドプロンプトを使用した業務例
ディレクトリの階層構造表示

アジア経済研究所図書館では、一部の資料を電子化し、閲覧に供している。従来はDVDに電子化した画像データを保存していたのだが、外付けハードディスクドライブ(以下、HDD)に保存した方がよいのではという議論があり1 、一部データでテスト的に実施している。

その際、データをどのような階層構造でHDD内に保存するかをメールで議論したのだが、言葉で説明するのも、理解するのも難しい。また、どこかの共有フォルダで実例を作成してもよいが、全体像の把握には図で俯瞰できる方が望ましい。

図3 treeコマンドの実行結果

図3 treeコマンドの実行結果

そこで利用したのが、treeコマンドである。あらかじめ自分がイメージする階層構造の実例を作成しておいたうえで、”tree /f”と入力してEnterを押下すると、現在参照しているディレクトリ以下にある、ファイルとディレクトリがツリー構造で表示される(図3)。また、”tree /f > ツリー.txt”と入力してEnterを押下すると、このツリー構造が、”ツリー.txt”というファイル名で、現在参照しているディレクトリ(この例ではC:\Users\Imamitsu\Desktop\ライブラリアンコラム)に保存される。このコマンドを分解すると次のようになる。

  • tree: ディレクトリを階層構造で表示する。
  • /f: ディレクトリだけでなく、その中のファイルも表示する。treeコマンドのオプション。
  •  > ファイル名: 画面に出力されるはずの結果を、”ファイル名”で指定した名前で保存する。

図3を見ると、C:\Users\Imamitsu\Desktop\ライブラリアンコラム\treeディレクトリの下に、”1_貴重書”、”2_新聞”というディレクトリが用意されており、それぞれの階層以下は異なるルールで整理されていることが俯瞰できるはずだ。

複数のテキストファイルの結合

アジア経済研究所では、来館者の方がどのような資料を利用したのか把握するため、書架から取り出した資料は特定の場所においていただくようにお願いしている。これら資料のバーコードは毎日読み込んでテキストファイルとして保存しておき、一定期間分を蓄積したらファイルを結合して、最終的に利用された本のリストを作成している。その際、複数のテキストファイルを結合するのに、for /f %i in ('dir /b *.txt') do (more "%i") >> combine.txtというコマンドを使用している。これは複数のコマンドの組み合わせなので、順番に説明していこう。

図4 複数のテキストファイルを結合するためのコマンド(クリックして拡大表示 )

図4 複数のテキストファイルを結合するためのコマンド(クリックして拡大表示 )

まず、今回の説明のために、C:\Users\Imamitsu\Desktop\ライブラリアンコラム\textfileというディレクトリを用意したので、コマンドプロンプトでここを参照させよう。図4①にある”cd textfile”がそれにあたる。先の説明(図2②③)では、C:\~から始まるフルパスを入力していたが、現在参照しているディレクトリの1つ下の階層を参照するならば、”cd “の後に直接そのディレクトリ名を入力してもよい。

次に、textfileディレクトリにどのようなファイルがあるのかを表示させるのが、”dir /b”コマンドである(図4②)。”dir”だけだと、ファイル名だけでなくファイルサイズや更新日時も表示されてしまう。これは後々の処理で都合が悪いので、”/b”を付してファイル名だけを表示させている。ここでは、”1.txt”、”2.txt”、”3.txt”の3つのファイルが存在している。

それでは、1.txtの中には何が書かれているのだろうか。図4③の”more 1.txt”コマンドでそれを表示させている。”more ファイル名”の形式で記述することで、そのファイルの中身を表示できる。ここでは1から始まる6桁の数字が複数記述されていることが分かる。

続く図4④では、”for /f %i in ('dir /b *.txt') do (more "%i")”とこれまで見てきたコマンドを含む長いコマンドが記述されている。人間に分かりやすく書くと「ディレクトリ内のすべてのテキストファイルの中身を表示して」という命令になる。PCへの命令として表現すると「ディレクトリの中で、.txtで終わるファイル名のリストを作成し、%iにファイル名の1つを代入する。代入されたファイル名の中身を表示する。これを最初に作成したファイル名のリストにあるすべてのファイルに対して行う。」という具合になる。

“('dir /b *.txt')”部分は図4②とほぼ同じである。異なる点は、”*.txt”と追記することで、ファイル名が”.txt”で終わるもののみを対象とするようにしている(“*”は当該部分にどのような文字があっても良いと示す記号である)。また、(‘’)で囲うことでこの部分が一塊の命令であることを指名している。

“(more "%i")”部分は図4③とほぼ同じである。ただ、ファイル名を記述する部分が”%i”という表記になっている。これは、%iが何を示すのかは別の場所で記述するので、その値をここで利用すると示すものである。

冒頭の”for /f %i in~do~”の部分では、繰り返しの処理をすること、繰り返しの回数、%iは具体的に何か、1回の処理では何をするのかを決めている。”for”は繰り返しの処理をするための命令、”in ~”は~部分にリストがある限り繰り返しを行うという命令、”/f %i”はリストから1つ取り出した値を%iとして扱うという命令である。

図4④の2行目以下は、自動的に表示される記述である。ここを見ると、(more "1.txt" ) (more "2.txt" ) (more "3.txt" )という合計3回の命令が自動的に実施されたことが分かる。また、それぞれのコマンドが実行された結果、ファイルの中身が画面に表示されている。

このコマンドの末尾に、” >> combine.txt”を追記することで、画面に表示されるはずの結果を”combine.txt”に保存している(図4⑤)。図4④の時と比べて、”more ~”のコマンド自体は画面に表示さているが、ファイルの中身は表示されていないことを確認してほしい。

また、テキストファイルへ保存する方法は前節でも説明しているが、その時は” > ”を使用していた。今回使用する” >> “との違いは、上書きするか、追加書き込みするかの違いである。” > “は上書き処理をするため、同じファイルに何度も書き込みを行う場合、過去の書き込みは消えてしまう。” >> “の場合は追加書き込みのため、過去の書き込みの下に、今回の結果が追記される。

最後に、”more combine.txt”でファイルの中身を表示し、確かに複数のテキストファイルが結合されたことを確認している(図4⑥)。


おわりに

本記事では、筆者が業務のなかで使用したコマンドプロンプトのコマンドを、「どういった業務の文脈で使用したか」を合わせて紹介した。もし同様の文脈でお困りの方がいたらぜひ参考にしていただきたい。

また、今回は2つの事例しか紹介できなかったが、コマンドやその組み合わせを知ると、PCへの理解が深まる。例えば、「複数のテキストファイルの結合」のなかで紹介した、for ~ in ~ do ~の構文はコマンドプロンプトだけでなく、様々なプログラミング言語でも用いられる表現である。PCへの理解が深まれば、応用が利くようになったり、こういう用途のコマンドもあるのではないかという勘も働くようになる。少しでもPCに詳しくなって、単純作業はすべてPCに任せてしまえるようになりたいものである。

著者プロフィール

今満亨崇(いまみつみちたか) アジア経済研究所学術情報センター図書館情報課。担当は図書館の管理するシステム全般。最近の活動に日本図書館協議会開催の研修講師や「特集:インフォプロのためのプログラミング事例集」(情報の科学と技術 70巻4号)の編集担当主査などがある。

(2022年12月06日 誤字修正)


  1. DVDは10年程度でデータが読みだせなくなる可能性がある。そのために定期的に焼き直しする必要があるが、単純に枚数が多いこと、ディスク入替の作業が手間なこと、DVDドライブは一般的にHDDより低速であること、等が作業上のボトルネックとなる。それに比べて、ハードディスクは複製作業が早く容易に行える。ただし、HDDの寿命は5年程度とされている。