0

したがって、ポート/コンピューターに応じて、フラッシュドライブを接続すると、認識され、別のドライブ文字が認識されます。フラッシュドライブの名前を見つけて、ドライブの文字を報告するためのコードが必要です。これは私が持っているものなので、それを見て、私が間違っていることを理解してみてください。

set DriveLabel=JERRYG225

for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
pause
 for /f "tokens=6 delims= " %%i in ('vol %%a: ^|find "drive"') do (
  pause
  echo %%i | find /i "%DriveLabel%" > nul
 )
)
4

2 に答える 2

1

割り当てられたドライブ文字とボリューム名を見つけるより良い方法があります。

C:ボリューム名DriveCD:ボリューム名、およびボリューム名DataDriveの USB ディスク ドライブを使用して、使用可能なハードディスク パーティションを指定すると、E:BackupDisk

wmic logicaldisk get caption^, volumename

生成します (コマンド プロンプトで):

Caption VolumeName
C:      DriveC
D:      DataDrive
E:      BackupDisk

バッチ ファイルで使用し、列名を削除します。

for /f "skip=1 tokens=1* delims= " %%x in ('wmic logicaldisk get caption^, volumename') do (
  echo %%x %%y
)

%%y一致する方法を見つけDRIVELABELて、一致するものが見つかった場合に保存するのはあなたに任せます%%x。:-)

于 2013-01-26T00:03:18.583 に答える
0

WNIC管理者権限を必要とする、に依存しない日常業務用の同様の関数を作成しました。ラベルは信頼できないため、USB ドライブのシリアル番号を使用しました。

:GetDriveLetter %SerialNumber% DriveLetter
    setlocal EnableDelayedExpansion
    set "Letters=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    for /L %%I in (0,1,25) do (
        set Drive=!Letters:~%%I,1!:
        if exist !Drive! (
            dir !Drive!|findstr /L "%~1" >NUL
            if not ERRORLEVEL 1 (
                set Result=!Drive!
                goto :GetDriveLetterRet
            )
        )
    )
    :GetDriveLetterRet
    endlocal &set "%2=%Result%" &goto :EOF

USB ドライブのドライブ文字を取得するには、次のように呼び出します。

call GetDriveLetter ABCD-1234 Drive
if defined Drive (
    pushd !Drive! 2>NUL && (
        REM do things here
    )
) else echo Can't find USB drive^^! & pause >NUL

編集: USB ドライブのシリアル番号を取得するには、そのドライブで aDIRまたはVOLコマンドを実行します。

于 2013-01-26T19:21:12.130 に答える