文字が変わる可能性のあるドライブを参照しようとしています。私はそのラベル(例えば、バッチファイル内のMyLabel(v :):V:\で参照することができます)を参照したいと思います。ラベルのみに基づいてドライブを参照/選択しますか? (ドライブ文字ではない)
これは、無応答と月の専門家Echangeに掲載されました。のは、SO、それに答えるどのくらいの速見てみましょう)
文字が変わる可能性のあるドライブを参照しようとしています。私はそのラベル(例えば、バッチファイル内のMyLabel(v :):V:\で参照することができます)を参照したいと思います。ラベルのみに基づいてドライブを参照/選択しますか? (ドライブ文字ではない)
これは、無応答と月の専門家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
をあなたはそのために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 "My Label"を呼び出すだけです。
@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
これまでの回答はあまりにも複雑で、特にバッチファイルには適していないようです。
この単純なライナーは、必要なドライブ文字を変数myDriveに置きます。明らかに、「マイラベル」を実際のラベルに変更します。
for /f %%D in ('wmic volume get DriveLetter^, Label ^| find "My Label"') do set myDrive=%%D
(バッチファイルではなく)コマンドラインから実行する場合は、%% Dを両方の場所で%Dに変更する必要があります。
変数が設定されたら、%myDrive%
を使用してドライブを参照できます。たとえば、
dir %myDrive%\someFolder
.batファイルから.vbsスクリプトを呼び出すことはできますか? –