リダイレクト | dos入門 [講座] | 逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓rpnの実践ウェブ   
rpn hacks! アールピーエヌ・ハックスサイトマップ

rpn | 講座 | dos入門 | DOSプロンプトを手とり足とりでやさしく学習。

HOME > 講座 > dos入門 > リダイレクト

hatena twitter facebook rss ソーシャルブックマーク

リダイレクト

 DOSにあってWindowsにないもの。その一つが、このリダイレクト機能です。リダイレクトを使いこなすとデータをプログラムで転がすように加工できますし、パソコン操作のレベルがグッと上がります。DOSって便利だなと実感するのも、このリダイレクトの存在が大きく影響しています。

リダイレクトは線路のレール切り替え

10ステップでdosをマスター さて、実際にリダイレクト操作する前に、標準入力(stdin)と標準出力(stdout)について説明しなければいけません。ちょっと概念的な話になるのですが、リダイレクトを理解するためには大切な話なので、じっくりと読み進めてください。

まず、DOS画面に出力されるテキスト文字は標準出力されているといいます。つまり、標準出力というデバイス(装置)があって、その出力先がたまたま画面であったと解釈するわけです。

  [入力元]                                          [出力先]

  キーボード >>---+                               +--->> CRT
               |                               |
  ファイル     >---+---> 標準入力      標準出力 ---+--->  ファイル
               |     (stdin)       (stdout)    |
  RS-232C  >---+                               +---> RS-232C

  ※標準入力がキーボードで標準出力がCRTの場合(打った文字が画面に出る)。


上図のCRTはディスプレー、つまり画面ですね。RS-232Cは通信するためのコネクタと思ってください。昔はRS-232C経由でモデム接続してパソコン通信ができました。

当たり前のことですが、画面に入力することはありませんし、キーボードに出力することもありません。しかし、RS-232Cはデータを出力したり入力したりするので、図の両端に書いてあります。これはファイルも同じで、ファイルから読み出すこともあればファイルに書き込むこともありますから、同じく図の両端に書いてあります。

つまり、キーボードは入力(専用)デバイス、画面は出力(専用)デバイス。RS-232Cやファイルは入出力デバイスです。そして、標準入力(stdin)とは現在、接続されている入力デバイスを意味します。同様に標準出力(stdout)とは現在、接続されている出力デバイスのことです。

ということは、その出力先が画面でなくファイルであれば、画面に出ていたテキスト文字は全てファイルに格納されることになります。同じように、標準入力も通常は入力元がキーボードなのですが、入力元をファイルとすることもできます。

これらの入力元・出力先を標準入出力に切り替えることをリダイレクトするといいます。レールの切り替え作業のようなイメージですね。では、さっそく試してみましょう。

実際にリダイレクトしてみよう

 DOSを起動して、\foobarディレクトリに移動してください。その後、dirコマンドを投入してみます。

  C:\foobar>dir

  (略)
  .              <DIR>        04-04-05  12:13 .
  ..             <DIR>        04-04-05  12:13 ..
           0 個                  0 バイトのファイルがあります.
           2 ディレクトリ      4,587.83 メガバイトの空きがあります.


これらの画面表示をリダイレクトして、ファイルに保存してみましょう。リダイレクトするためのコマンドは特になく「>」記号があるだけです。dirに続いて以下を投入してみてください(dirと>の間は半角スペース)。

  C:\foobar>dir >list.txt


C:\foobar>プロンプトが表示されただけですが、list.txtファイルが作成されているはずです。dirコマンドで確かめましょう。

  C:\foobar>dir

  (略)
  .              <DIR>        04-04-05  12:13 .
  ..             <DIR>        04-04-05  12:13 ..
  LIST     TXT           389  04-04-05  16:14 list.txt
           1 個                389 バイトのファイルがあります.
           2 ディレクトリ      4,587.81 メガバイトの空きがあります.


list.txtが389バイトで作成されていますね。typeコマンドで中身を見てみましょう。

  C:\foobar>type list.txt

   ドライブ C: のボリュームラベルは  WINDOWS 98
   ボリュームシリアル番号は 1471-12D6
   ディレクトリは C:\foobar

  .              <DIR>        04-04-05  12:13 .
  ..             <DIR>        04-04-05  12:13 ..
  LIST     TXT             0  04-04-05  16:14 list.txt
           1 個                  0 バイトのファイルがあります.
           2 ディレクトリ      4,587.81 メガバイトの空きがあります.


先ほどのdirコマンドの内容がファイルに書き込まれていますね。何だか混乱してきた人はWindowsでfoobarフォルダの中にあるlist.txtを開いてみてください。理解できると思います。

追加リダイレクトを試してみよう

 ちなみにファイルの末尾に続けて書き込むことができる追加リダイレクトという便利な方法もあります。追加リダイレクトするためのコマンドも特になく「>>」記号をファイルの前に書くだけです。先ほどのlist.txtに追加リダイレクトで、再度dirコマンドの内容を書き込んでみましょう。

  C:\foobar>dir >>list.txt


これで先ほどのlist.txtにdirの内容が追加で書き込まれています。つまり、list.txtにはdirの内容が2回書き込まれていることになります。typeコマンドで中身を見てみましょう。

  C:\foobar>type list.txt

   ドライブ C: のボリュームラベルは  WINDOWS 98
   ボリュームシリアル番号は 1471-12D6
   ディレクトリは C:\foobar

  .              <DIR>        04-04-05  12:13 .
  ..             <DIR>        04-04-05  12:13 ..
  LIST     TXT             0  04-04-05  16:14 list.txt
           1 個                  0 バイトのファイルがあります.
           2 ディレクトリ      4,587.81 メガバイトの空きがあります.

   ドライブ C: のボリュームラベルは  WINDOWS 98
   ボリュームシリアル番号は 1471-12D6
   ディレクトリは C:\foobar

  .              <DIR>        04-04-05  12:13 .
  ..             <DIR>        04-04-05  12:13 ..
  LIST     TXT           389  04-04-05  16:14 list.txt
           1 個                389 バイトのファイルがあります.
           2 ディレクトリ      4,587.81 メガバイトの空きがあります.


きちんと2回分、追加で書き込まれていますね。

入力元もリダイレクトできる

 ここまでが標準出力のリダイレクトです。逆に標準入力のリダイレクトも存在します。DOSで日付を変えるコマンドにdateコマンドがありますので、dateコマンドを投入してみてください。

  C:\foobar>date
  現在の日付は 20**-**-** (**)        (**のところは日によって異なる)
  日付を入力してください(年-月-日):


今度は、C:\foobar>プロンプトが表示されずにカーソルが年月日の後で点滅しています(Windowsのバージョンによっては若干表示が異なります)。日付を確認するだけならそのままエンターキーを押します。変えるつもりなら日付を入力します。ここでは日付を1999-12-31と入力して、日付を過去に戻してみましょう。

  C:\foobar>date
  現在の日付は 20**-**-** (**)        (**のところは日によって異なる)
  日付を入力してください(年-月-日): 1999-12-31 <-- キーボード入力


C:\foobar>プロンプトが表示されたら、再度、dateコマンドを投入してください。

  C:\foobar>date
  現在の日付は 1999-12-31 (金)
  日付を入力してください(年-月-日):


日付が変わっていますね。今回は確認だけで変更はしないので、カーソルが点滅しているところで(日付を入力せずに)エンターキーだけを入力します。

同じことを標準入力のリダイレクトを使って行ないます。Windowsでfoobarフォルダにdate.txtというファイルを作り、その中に今日の日付(例えば、2004-04-04)を入力して、最後にエンターキーを押してください。そして、そのファイルを保存してください。

DOSに戻って、dirコマンドを投入すると以下のようになっているはずです。

  C:\foobar>dir

  (略)
  .              <DIR>        04-04-05  12:13 .
  ..             <DIR>        04-04-05  12:13 ..
  LIST     TXT           778  04-04-05  16:24 list.txt
  DATE     TXT            12  99-12-31  16:34 date.txt
           2 個                790 バイトのファイルがあります.
           2 ディレクトリ      4,583.78 メガバイトの空きがあります.


さて、標準入力をリダイレクトして、日付を今日の日付に戻してみます。標準入力リダイレクトに対応するコマンドも特になく「<」記号を使用します。以下のコマンドを投入してください(dateと<の間は半角スペース)。

  C:\foobar>date <date.txt
  現在の日付は 1999-12-31 (金)
  日付を入力してください(年-月-日): 2004-04-04


今度はどうですか?すぐにC:\foobar>プロンプトが出てきました。日付もファイルで用意した日付が自動的に入っています。dateコマンドで確認してみてください。2004-04-04に変わっているはずです。

今回の例だけだと、リダイレクトの強力さがあまり伝わらないと思いますが、少し違う世界が見えたのではないのでしょうか。

後始末はしっかり

 最後に、dateコマンドで今日の日付に戻した後、exitコマンドでDOS窓を終了してください。

【今回のDOSコマンド(記号)】
date」「」「>>」「

警告バックスラッシュはエンマークに読み替えて下さい(IE)。
バックスラッシュとエンマーク

警告文字で作られた図表や式が崩れることがあります。ブラウザによっては固定幅フォントをMSゴシックにするときれいに表示されます。それでも崩れる場合は図表や式をメモ帳にコピー後、閲覧下さい。