将变量设置为找到的第一个可移动磁盘的驱动器号的批处理文件

将变量设置为找到的第一个可移动磁盘的驱动器号的批处理文件

我想编写一个批处理文件,这样当我在 cmd 中运行它时,它会设置一个新变量,该变量等于我的 USB 闪存驱动器的驱动器号(当然,如果它是该类型的唯一存储设备)。现在假设我不关心它是否附加了冒号。

这是我在将功能正常的 Integral USB 连接到我的笔记本电脑时尝试的操作:

@echo off
for /F "tokens=1,2,3,4,5" %%A IN ('wmic logicaldisk get description') DO ( 
    if %%A=="Removable Disk" (
        @echo wmic logicaldisk get caption
    )else (
        @echo no luck!
    )
)

输出结果如下:

no luck!
no luck!
no luck!
no luck!
no luck!
no luck!

有人能指出剧本中的一些明显的错误吗?

这也是从 cmd 运行 wmic 命令的结果:

C:\Users\Dziugas\Desktop>wmic logicaldisk get caption,description
Caption  Description
C:       Local Fixed Disk
D:       CD-ROM Disc
E:       CD-ROM Disc
F:       Removable Disk

答案1

你已经接近目标了。你想跳过第一行。你想同时获取描述和设备 ID(逗号是保留的,因此你必须用插入符号将其转义),并且由于输出中有空格,你必须在 if 中包含多个输出并将其放在引号中。这是一个获取最后一个可移动磁盘和最后一个本地固定磁盘的示例。获取每个磁盘的第一个会比较棘手,但听起来你无论如何都只会得到一个。你可以随心所欲地使用它,例如通过管道传输到另一个进程中。

@echo off 
REM setlocal keeps the variables from escaping the batch file (which I assume you want?)
setlocal
for /F "skip=1 tokens=1-10" %%A IN ('wmic logicaldisk get description^, deviceid') DO ( 
    REM echo %%A %%B %%C %%D %%E %%F %%G
    if "%%A %%B"=="Removable Disk" (
        set LastRemovableDisk=%%C
    )
    if "%%A %%B %%C"=="Local Fixed Disk" (
        set LastFixedDisk=%%D
    )
)

REM This part is just to demonstrate the output
echo %LastRemovableDisk%
echo %LastFixedDisk%

相关内容