使用批处理文件检索驱动器文件

时间:2013-01-25 22:45:55

标签: batch-file

因此,根据端口/计算机,我将闪存驱动器插入其中是可识别的,并且可以识别不同的驱动器号。我需要代码才能找到我的flashdrive名称并向我报告驱动器的字母。这就是我所拥有的,所以你可以看一下它,并试图找出我做错了什么。

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

2 个答案:

答案 0 :(得分:1)

有一种更好的方法可以找到指定的驱动器号和卷名。

使用卷名为C:DriveC,卷名为D:的可用硬盘分区DataDrive,以及E:上带有卷的USB磁盘驱动器名称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(如果找到)。 : - )

答案 1 :(得分: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驱动器的序列号,只需在该驱动器上执行DIRVOL命令。