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
)

我将留给您弄清楚如何匹配%%yDRIVELABEL保存匹配项(%%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 驱动器的序列号,只需在该驱动器上执行一个DIR或一个VOL命令。

于 2013-01-26T19:21:12.130 回答