由于您的最小代码示例目前对我来说意义不大,Gerhard Barnard 也提到过,我决定发布一些代码 sn-ps 供您参考。
我更喜欢使用Mountvol 来处理这类事情。 在空光驱等情况下,它肯定会有所帮助。 D:\,其中If Exist D:\ 将失败,但这并不一定意味着驱动器号D: 可以分配给新驱动器。
如果您只是想识别第一个安装的驱动器号,按字母顺序:
@Set "_l="&For /F Tokens^=* %%A In ('MountVol^|Find ":\"^|Sort/R')Do @Set "_l=%%~dA"
@Echo(The first letter assigned to a drive is %_l%&Pause
要识别最后安装的驱动器号,按字母顺序:
@Set "_l="&For /F Tokens^=* %%A In ('MountVol^|Find ":\"^|Sort')Do @Set "_l=%%~dA"
@Echo(The last letter assigned to a drive is %_l%&Pause
要确定第一个可用的,已卸载,驱动器号,按字母顺序:
@Set "_l="&For /L %%A In (67 1 90)Do @Cmd/C Exit/B %%A&Call:Sub %%=EXITCODEASCII%%
@Echo(The first available drive letter is %_l%&Pause&Exit/B
:Sub
@If Not Defined _l MountVol|Find "%1:\">Nul||Set "_l=%1:"
并确定最后一个可用的,卸载,驱动器号,按字母顺序。
@Set "_l="&For /L %%A In (90 -1 67)Do @Cmd/C Exit/B %%A&Call:Sub %%=EXITCODEASCII%%
@Echo(The last available drive letter is %_l%&Pause&Exit/B
:Sub
@If Not Defined _l MountVol|Find "%1:\">Nul||Set "_l=%1:"
在后两个示例中,如果您希望包含一个可能的B: 驱动器,您可以将67 替换为66,或者如果您还希望包含一个可能的A: 驱动器,则可以替换为65 ,您也可以将其替换为68 以排除C: 驱动器。