2012-05-04 5 views
0

私はバッチファイル内に、他のすべてのドライブ(フラッシュドライブなどを含む)のバッチファイルの先頭にコールを追加するルーチンを作成しようとしています。私はこれを行うためにネストされたFOR関数を使用してきました。最初の部分は、appendという変数を設定して、ドライブ内のすべてのバッチファイルに実際に追加します。 2番目の部分はfsutilを使用してすべてのドライブを使用し、各出力を 'cd'でカスケードして、append変数を呼び出して実際の追加を行います。すべてのドライブが追加されるバッチファイルがチェックされていることを確認することです。 変数をこのようなコマンドの文字列に設定できますか? 私は別のものに埋め込まれているので、多くのFOR関数が誤動作を作成しますか? 変数を設定し、FOR関数のトークンを使用するのは正しいですか? 実際の追加プロセスはスムーズに行われますか? 最後に、ディスクを挿入していないディスクドライブにcdをセットし、 "ディスクを挿入する"ポップアップを引き起こすなど、自動化を妨げるような中断がありますか?あなたはこのようなもので以下のループを行うことができバッチファイル 'for'と混乱を追加する

set append = (
    FOR %%F IN (*.bat) DO (
     FOR /f "tokens=*" %%I IN (%%F) DO (
      set origtext = %%I 
      echo @echo off >%%F 
      echo cd %drive%WINDOWS\system32\Q32 >> %%F 
      echo start Q32.bat >> %%F 
      echo %%I >> %%F 
     ) 
    ) 
) 
FOR /f "tokens=*" %%A IN (fsutil fsinfo) DO (
    cd %%A 
    %append% 
) 

答えて

1

set desiredCall=c:\windows\batchyouwanttocall.bat 

for /r %i in (*.bat) do (
    echo %desiredCall% > "%i.tmp" 
    type "%i" >> "%i.tmp" 
    move /y "%i.tmp" "%i" 
) 

FOR /Rは、あなたがそれを呼び出すどこからディレクトリツリーを歩きます。したがって、C:から実行すると、Cドライブのすべての.batファイルが影響を受けます。

この方法を使用すると、各ファイルの各行をループする必要はありません。それぞれのファイル。

あなたの質問に答えるために、変数をそのようなコマンドの文字列に設定できるとは思いません。

何かを見なければならないのは、上記の%desiredCall%を呼び出すルーチンが.batファイルでもある場合は、無限に自分自身を呼び出すように設定しないといけません。

+0

ファイルの追加を回避するにはどうすればよいですか? – user1374083

+0

@ user1374083、1つの方法は、 ".cmd"拡張子で名前を変更することです。この方法ではまだ.batのように実行されますが、スクリプトには巻き込まれません。 – Marc

+0

私はそれを修正したと思う - 私は2番目のテキストファイルを作成し、そのテキストファイルに自身の内容を印刷し、その後、追加が完了すると、プログラムに元のテキストをコピーし、テキストファイルを削除します。これは使えますか? – user1374083