« 蒸し暑い日だった…。 | トップページ | 今日の日記:通院。 »

2008年10月25日 (土)

[IT覚書][Windows]コマンドラインからフォルダを全消去する方法。

 つまり、UNIXでいうところの「rm -rf」をDOSコマンドでやる方法。(厳密にはもうDOSなどという言葉は死語ですね。Windowsのコマンドプロンプトという方が正しい)

 昔はディレクトリと言っていたものをフォルダと言うようになったのはWindows95からかな。昔のMS-DOSではディレクトリと呼んでいた。僕は頭の中でいつもフォルダ→ディレクトリと変換している。(いまでもUNIX/Linuxでは普通にディレクトリと言うけれど)

 まあ、そんなことはさておき。パッとやろうとして「どうやるんだったっけ?」となったのが、フォルダ全消去。Windows Server 2003 R2 上で動くバッチファイルの中で書きたい。

 DOSにも rmdir コマンドはあった。さらには一時期 deltree などという怪しげなコマンドもあったようだ。(これは使ったことはない)
 rmdir /? でヘルプを出して確認。普通に rmdir /s /q で行けそうか? 試してみると「ファイルが存在する」という理由でエラーを返される。

 これは昔からのDOSの仕様なのか、ファイルとディレクトリとは別に考えるようになっている。大まかに言うと、del は主にファイルを消去するコマンドであり、rmdir はディレクトリだけを消去するコマンドである。

 以下のような順序で実行すると、複数のファイルを含んだ多重構造のディレクトリを消すことができた。

  del /s /f /q [dir]
  rmdir  /s /q [dir]

 ただし、厳密に言うと UNIX系の rm -rf (ディレクトリを再帰的に消去し、確認メッセージも出さないで強制的に実行する)とは、ちょっと違うことが起こる。
 del コマンドにおいて消去されたファイル名が標準出力ストリームに出てくる。
 まあ、僕は情報が何も出ないよりは出てくれた方がうれしいので、上記のやり方で問題ないと思っている。画面に標準出力を向けたままでは、ただ画面が流れるだけなので、もちろん以下のようにするのが普通である。

  del /s /f /q [dir] >> [logfile] 2>&1
  rmdir  /s /q [dir] >> [logfile] 2>&1

 こうすると任意名のログファイルに標準出力とエラー出力の両方が出力され、画面には出力されない。こういったリダイレクションは、もともとUNIXからDOSに引き継がれた仕様なので、同じようにできる。だが、UNIXでできるリダイレクションがすべてできるわけではない。Windowsのコマンドプロンプト用のシェル「CMD.exe」は、UNIXの各種シェルに比べると貧弱である。

|

« 蒸し暑い日だった…。 | トップページ | 今日の日記:通院。 »

コメント

この記事へのコメントは終了しました。