参考/只select一个驱动器的标签? (即不是盘符)

我试图提到一个驱动器的字母可能会改变。 我想通过它的标签(例如,MyLabel(v :))在batch file中引用它,可以用V:\引用它,我想通过MyLabel来引用它。

(这是张贴在专家Echange一个月没有答案,让我们看看有多快,SO回答)

这个bat文件将给你从驱动器标签的驱动器号:

Option Explicit Dim num, args, objWMIService, objItem, colItems set args = WScript.Arguments num = args.Count if num <> 1 then WScript.Echo "Usage: CScript DriveFromLabel.vbs <label>" WScript.Quit 1 end if Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalDisk") For Each objItem in colItems If strcomp(objItem.VolumeName, args.Item(0), 1) = 0 Then Wscript.Echo objItem.Name End If Next WScript.Quit 0 

运行它为:

  cscript /nologo DriveFromLabel.vbs label 

以前的答案看起来要么过于复杂,要么不适合批处理文件。

这个简单的衬垫应该放置在变量myDrive所需的驱动器号。 很明显,将“我的标签”更改为您的实际标签。

 for /f %%D in ('wmic volume get DriveLetter^, Label ^| find "My Label"') do set myDrive=%%D 

如果从命令行运行(而不是在批处理文件中),那么%% D必须在两个地方更改为%D。

一旦设置了变量,就可以使用%myDrive%来引用驱动器。 例如

 dir %myDrive%\someFolder 

您可以使用WMI查询语言。 看看http://msdn.microsoft.com/en-us/library/aa394592(VS.85).aspx的例子。 您正在查找的信息可以通过Win32_LogicalDisk类的属性VolumeName获得, http://msdn.microsoft.com/en-us/library/aa394173( VS.85) .aspx

SELECT * FROM Win32_LogicalDisk WHERE VolumeName="MyLabel"

以下是一个简单的批处理脚本getdrive.cmd,用于从卷标中查找驱动器号。 只需调用“getdrive MyLabel”或getdrive“我的标签”。

 @echo off setlocal :: Initial variables set TMPFILE=%~dp0getdrive.tmp set driveletters=abcdefghijklmnopqrstuvwxyz set MatchLabel_res= for /L %%g in (2,1,25) do call :MatchLabel %%g %* if not "%MatchLabel_res%"=="" echo %MatchLabel_res% goto :END :: Function to match a label with a drive letter. :: :: The first parameter is an integer from 1..26 that needs to be :: converted in a letter. It is easier looping on a number :: than looping on letters. :: :: The second parameter is the volume name passed-on to the script :MatchLabel :: result already found, just do nothing :: (necessary because there is no break for for loops) if not "%MatchLabel_res%"=="" goto :eof :: get the proper drive letter call set dl=%%driveletters:~%1,1%% :: strip-off the " in the volume name to be able to add them again further set volname=%2 set volname=%volname:"=% :: get the volume information on that disk vol %dl%: > "%TMPFILE%" 2>&1 :: Drive/Volume does not exist, just quit if not "%ERRORLEVEL%"=="0" goto :eof set found=0 for /F "usebackq tokens=3 delims=:" %%g in (`find /C /I "%volname%" "%TMPFILE%"`) do set found=%%g :: trick to stip any whitespaces set /A found=%found% + 0 if not "%found%"=="0" set MatchLabel_res=%dl%: goto :eof :END if exist "%TMPFILE%" del "%TMPFILE%" endlocal