読者です 読者をやめる 読者になる 読者になる
スポンサーリンク

コマンドプロンプトで,暗記するべき10の必須コマンド  (前半) ファイル処理系

MS x個のy コマンドプロンプト


Windowsは「シェルが貧弱だ」という点がよくダシにされる。


確かにコマンドプロンプト(そしてMS-DOS)単体は貧弱だ。UNIX系シェルスクリプトと比べ,できる事が圧倒的に少ない。


しかし,少ないからこそ,できる事は徹底的に把握しておく必要がある


ふだんWindowsの操作はGUIに依存しているだけに,コマンドラインから一括処理ができると有難みは大きい。

ネットワーク系の操作など,コマンドプロンプトでしかできない事もある。
また,Windows上で手作業を省くためにバッチファイルを作ろうとすると,コマンドプロンプトの知識が必要になる。


とはいっても,そういった情報を「コマンド集・一覧」の体裁で紹介しようとすると,網羅的にはなるが実用性は低くなってしまうだろう。

ポイントを絞って,現場で実際に使われている・もしくは使えるコマンドが知りたいのだ。


下記は,そういったWindowsコマンドプロンプトの「実際に役立つ」コマンドだけを10個集めたもの。

作業効率を改善する助けになるし,またいざという時に必要になるので,暗記しておくことが望ましい。


GUIのWindows上で,あえてコマンドプロンプトを使うことの目玉は,

  1. ファイル処理系
  2. ネットワーク系

の2分野にある。


今回は,1の「ファイル処理系」のコマンドを5つ列挙する。

※↑自作の もくじジェネレータ で自動生成


なお,事前に「窓の手」などのフリーソフトを使って,フォルダを右クリックだけでコマンドプロンプトが出せるように設定しておきたい。

窓の手
http://www.asahi-net.or.jp/~vr4m-ikw/Global/


もしくはレジストリ操作方法:

選んだフォルダをカレントフォルダにしてコマンドプロンプトを開く
http://trendy.nikkeibp.co.jp/article/tec/winxp/20050309/111687/

(※Windows 7ならソフト不要で,Shiftキー+右クリック>「コマンドウィンドウをここで開く」でOK。)


(1)ファイルの一括処理: for 文

  このフォルダにある全テキストファイルを一斉に開きたい


    for %V in ( *.txt ) do %V

解説

  • フォルダ中で,正規表現でファイルパターンが *.txt にマッチする全ファイルを検出する。
  • 検出結果のファイル名は %V なる変数に代入される。
  • 全マッチ結果について,do 以下のコマンドが実行される。
  • ファイル名 %V を単独で実行すると,そのファイルがデフォルトアプリケーションで開かれる。

これは,簡単な例である。

実際には,次のような場合に威力を発揮する。

  このフォルダにある全SQLファイルを一斉に実行したい


    for %V in ( *.sql ) do psql -d DBNAME -U USERNAME -f %V

これはPostgreSQLの例。パスワードは複数回入力する必要があるが,実行したいSQLは自動的に,順番に選択・実行される。

データベース名やユーザ名を1ファイルごとに入力し直さないで済む。


さらに,このような使い方もある。

  このフォルダ以下にある全JPGファイルを
  一つのフォルダ上にコピーしたい


    for /R %V in (*.jpg) do copy /Y "%V" d:\img\



  このフォルダにある全テキストファイルを
  一つのファイルに結合したい


    for %V in ( *.txt ) do copy temp.txt + %V temp.txt

解説

  • copy /Y A B というコマンドは,同名のファイルは上書きしてコピーする事を指す。
  • copy A + B C というコマンドは,AとBを結合してCの名で保存する事を指す。
  • フォルダから全テキストファイルを抽出し,それぞれ %V に格納
  • %V と temp.txt を毎回結合する。


前者の例では,カレントディレクトリ以下の全てのフォルダからJPGファイルを探索し,コピーする。
(同名のファイルを上書きせずに,フォルダ構造を保ってコピーしたい場合は, xcopy /S /H *.jpg d:\img\ とする。)


後者のtemp.txt の中には,全テキストファイルの内容が順番に結合して保存される。
(※多少,余計な情報が混入する可能性もあるので注意。)

「ためておいた細切れのメモを,いっぺんに印刷したい!」というような時に役立つだろう。

※なお,copyコマンドは /b でバイナリオプションを付ければ,mpegなど動画ファイルもコマンドラインで結合できる便利なコマンド。


動画ファイルをバッチファイルまたはコマンドラインで簡単に結合させる TIPS
http://bbb96.exblog.jp/3555355/


ちなみに,temp.txt は空のファイルとして前もって準備しておく必要がある。
これもおまけでコマンド上で行なってしまおう。

  空のテキストファイルを作成する


    echo:> temp.txt

この場合,改行が1つだけのテキストデータが作成される。


なお上記で % の記号が出てきたが,バッチファイル中で同じ事をやりたい場合は,% を %% と表記するのを忘れないこと。



(2)ファイルを検索: dir

  ファイル名をキーにしてファイルを再帰的に検索、
  フルパスを表示


    dir /s /b *.txt

「再帰的に」というのがポイント。このフォルダ以下の全ての子フォルダ内も検索対象になる。

オプションもそのまま覚えておきたい。

(3)ファイル内を検索: findstr

  ファイル内容の単語をキーにしてファイルの行を検索、
  ファイル名と行内容を表示

  
  「hoge」または「foo」という文字列を含むようなテキストファイル


     findstr /n /s "hoge foo" *.txt


  "hoge foo"というつながりを含むようなテキストファイル


     findstr /n /s /c:"hoge foo" *.txt


これも再帰的な検索。

プロジェクトで修正待ちの箇所を一斉検出する際などに役立つ。

  ソースディレクトリ以下の全phpファイルから,
  TODO扱いになっている部分を抜き出し,ファイルに保管


    findstr /n /s "TODO" *.php > todo.txt

> の後に保存先ファイル名を書く。

ファイルのフルパスと,行番号と,行全体が抽出されるので便利。

TODO抽出のためのバッチとして,ソースディレクトリの最上部に設置しておくのもよいだろう。(IDEに既存の機能があれば不要かもしれないが,使い方は自在である。)

(4)ファイルの差分を検出: fc

diffのように2つのファイルを比較し,相違を検出する。/b でバイナリ比較もできる。

  テキストファイルの差分を行数付きで表示


    fc /n a.txt b.txt

(5)フォルダ構造を表示: tree

  ファイルをツリー構造で一覧表示


    tree /f

それなりにしっかりした木構造の図が出力される。フォルダ内のスナップショットとして利用できるだろう。


前半まとめ

  1. for %V in ( *.txt ) do %V
  2. dir /s /b *.txt
  3. findstr /n /s "検索文字列" *.txt
  4. fc /n a.txt b.txt
  5. tree /f

Windowsを作業環境として利用するからには,これらは全て覚えておきたい。


なお,atコマンドによりタイマーを設定する方法も含めたかったが,コマンドプロンプト以外の方法でも実現できるため除外した。

コマンドプロンプトで指定した時間にプログラムを起動する
http://cmd-pro.com/m_timer.html

次回は,ネットワーク系のコマンド5つを扱う。