0

バッチ ファイルをまとめて、光学ドライブを除くシステムの各論理ドライブでプログラムを実行しようとしています。光学式ドライブは問題なく除外されますが、何らかの理由で、変数に値がないことを除いて、テストしている構築済みコマンドのエコーが1回余分に実行されます。ループが null 値に対して余分な時間を繰り返しているようです。アイデア?

( IF NOT !drive! == %safe% は、スクリプトが存在するドライブに対してコマンドを実行しないようにするためのものであり、「安全」は単なる頭字語です)

for /F "usebackq skip=1 tokens=1,2" %%a IN (`wmic logicaldisk get DeviceID^,DriveType`) do (
    SET drive=%%a
    SET driveType=%%b
    IF NOT !drive! == %safe% (
        IF NOT !driveType! == 5 (
        ECHO test commands
        )
    )
)
4

1 に答える 1

1

wmic結果のレポートの最後に追加のキャリッジ リターンを配置します。次のようなことを試してください:

for /f "skip=1 tokens=1,2" %%a IN ('wmic logicaldisk get DeviceID^,DriveType ^| findstr /v /r /c:"^$"') do (
    SET drive=%%a
    SET driveType=%%b
    IF NOT !drive! == %safe% (
        IF NOT !driveType! == 5 (
            ECHO test commands
        )
    )
)

注:usebackqコマンドには前方ティックが含まれていないため、必須ではありません。空白行を検索するfindstrだけです(つまり、正規表現は「行頭に続いて行末」です)。

于 2013-05-06T20:02:21.840 に答える