2009年10月09日

バッチでディレクトリツリーの各サブディレクトリを操作する

Performing an operation in each subdirectory of a directory tree from batch
http://blogs.msdn.com/oldnewthing/archive/2007/05/11/2532913.aspx


バッチファイルからディレクトリツリーの各々のサブディレクトリでコマンドを実行するために、以下のコマンドを適用することができる:

for /f "delims=" %%i in ('dir /ad/s/b') do echo %%i

(コマンドプロンプトからこのコマンドを実行したいなら、パーセント記号を二重にしない)

/FオプションはFORコマンドのいろいろな特殊機能を有効化する。最も重要な変化は、単一引用符内の文字列を実行したときの出力をコマンドとして解釈するということである。(usebackqオプションを使うとこの機能は変化するが、ここでは使っていない。)したがって、FOR命令はdir /ad/s/bコマンドを実行して、出力を解析する。dir /ad/s/bコマンドはディレクトリだけを再帰的にリストアップし、見つかったディレクトリの名前のみを表示する。

私たちが提供したオプションdelims=はデフォルトの区切り文字をスペースから何もなしに変更する。これはすべての行が%i変数変数に読み込まれることを意味する。(通常は、最初の単語だけが%iに割り当てられる。)したがって、このFORループはサブディレクトリ名が代入された%i変数内の各サブディレクトリに対して1度だけ実行する。

このコマンドは各行が単にディレクトリ名を表示すよう要求する。現実的には、たぶんここにもっと面白いものを置くだろう。たとえば、各ディレクトリのセキュリティー記述子をダンプするには(これはこのエントリを書く動機となった最初の問題だった)、これをコマンドライン上でタイプすればいい:

for /f "delims=" %i in ('dir /ad/s/b') do cacls "%i" >>"%TEMP%\cacls.log"

あら探しする人のコーナー

私は誰もが本当にバッチファイルで作業が楽しくなるとは思わないが、それはこのヒントでは作業が効率的にならないという意味ではない。



Posted by niwatori_atama at 20:30│Comments(0)TrackBack(0)この記事をクリップ!ヒント/サポート 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/niwatori_atama/51271674

コメントする

名前
URL
 
  絵文字