Datenträger nach Label finden und umgekehrt
Samstag, den 10. Oktober 2009 um 00:34 Uhr
Wie Windows die Laufwerksbuchstaben verteilt kann einem mit diesem Script reichlich egal sein.


Wie unschwer zu erkennen ist, ist dies eine "Funktion" die den Namen der Variablen bekommt, die hinterher den Laufwerksbuchstaben enthalten soll, und den Laufwerksstring.
Das ganze ginge auch etwas kürzer, aber es werden hier auch Labels mit Leerzeichen wie "Lokaler Datenträger" erkannt. Umlaute werden einfach normal eingegeben/übergeben, und können trotz falscher Darstellung verglichen werden.

REM PFLICHT: setlocal enabledelayedexpansion
REM ------ VOL DETECT ------ :volumebyname set varname=%1 set volname=%2 set volname=%volname:~1,-1% set suche=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 set res= set tmp= for %%a in (%suche%) do ( echo Checking %%a.... set tmp= for /f "tokens=*" %%i in ('VOL %%a: 2^>nul') do ( if "!res!"=="" ( REM nur erste Zeile auslesen und schleifen sauber verlassen if "!tmp!"=="" ( set tmp=%%i REM " Datenträger in Laufwerk R: ist RamDisk" REM das heißt 31 Zeichen überspringen set tmp=!tmp:~31! REM echo compare: --!tmp!-- REM echo with: --!volname!-- if "!tmp!"=="!volname!" ( set res=%%a echo !tmp! is drive %%a ) ) ) ) ) set !varname!=!res! cls goto :eof REM ------ VOL DETECT ------


Umgekehrt, aus "c" mach "Lokaler Datenträger".

echo off
setlocal enabledelayedexpansion

:: lese Laufwerksnamen auch mit Leerzeichen

set drvletter=c

set temp=
for /f "tokens=*" %%i in ('VOL %drvletter%:') do (
	:: nur erste Zeile auslesen und schleife sauber verlassen
	if "!temp!"=="" (
		set temp=%%i
		:: REM Datenträger in Laufwerk R: ist RamDisk
		:: das heißt 31 Zeichen überspringen
		set res=!temp:~31!
	)
)

echo !drvletter! Name ist (Umlaute missachtend):
echo !res!
echo.
pause

endlocal