CD identifizieren

Zweck

GetDrvL ermittelt den Laufwerksbuchstaben eines Laufwerks.
Das Laufwerk wird durch das Volume (Datenträgerbezeichnung) spezifiziert.

Beispiele
Aufruf Ausgabewert Ausgabeort
GetDrvL fat32 cdrom > varset.bat set CDROM=G: Datei: varset.bat
GetDrvL fat32 /q 7 DOS-Variable Errorlevel
Beschreibung der Beispiele

Ein Datenträger mit der Datenträgerbezeichnung FAT32 befindet sich in Laufwerk G:. Beim Start der Batchdatei wird der DOS-Variablen "CDROM" der Laufwerksbuchstabe G: zugewiesen. Wird keine Variable angegeben, wird der Standardname "DRVL" verwendet. Die vordefinierte DOS-Variable Errorlevel wird auf den Zahlenwert 7 gesetzt.

Fehlerausgabe

Wird das Laufwerk nicht gefunden, wird der Wert 255 zugewiesen.

rem 1. Beispiel
rem Standardvariable DRVL verwenden
getdrvl  fat32  >  R:\varset.bat
call  R:\varset.bat
if x%drvl%==x255 goto Ende
xcopy  %drvl%\*.*  R:
:Ende


rem 2. Beispiel
rem Selbstdefinierte DOS-Variable verwenden
getdrvl  fat32  cdrom  >  R:\varset.bat
call  R:\varset.bat
if x%cdrom%==x255 goto Ende
xcopy  %cdrom%\*.*  R:
:Ende

Alternativ kann man die DOS-Variable Errorlevel auswerten.
Sie enthält die Werte:
C: = 3, D: = 4, E: = 5 usw., Laufwerk nicht gefunden = 255

rem 3. Beispiel
rem Vordefinierte DOS-Variable Errorlevel verwenden
getdrvl  fat32  /q
if errorlevel 3 set lfw=C:
if errorlevel 4 set lfw=D:
if errorlevel 5 set lfw=E:
if errorlevel 6 set lfw=F:
if errorlevel 7 set lfw=G:
if errorlevel 8 set lfw=H:
if errorlevel 9 set lfw=I:
if errorlevel 10 set lfw=J:
if errorlevel 11 set lfw=K:
if errorlevel 12 set lfw=L:
if errorlevel 13 set lfw=M:
if errorlevel 14 set lfw=N:
if errorlevel 15 set lfw=O:
if errorlevel 16 set lfw=P:
if errorlevel 17 set lfw=Q:
if errorlevel 18 set lfw=R:
if errorlevel 19 set lfw=S:
if errorlevel 20 set lfw=T:
if errorlevel 21 set lfw=U:
if errorlevel 22 set lfw=V:
if errorlevel 23 set lfw=W:
if errorlevel 24 set lfw=X:
if errorlevel 25 set lfw=Y:
if errorlevel 26 set lfw=Z:
if errorlevel 255 goto Ende
xcopy %lfw%\*.* R:
:Ende
Quelltext des Programms
program getdrvl;

{ W. Hermanns
  29.12.2004
  Turbo Pascal 6.0
  GETDRVL ermittelt den Laufwerksbuchstaben eines Laufwerks
  Das Laufwerk wird durch die Datenträgerbezeichnung spezifiziert. }

uses dos;
 { Unit Dos wird für den Datenträgerzugriff benötigt }
 { Achtung: Unit Crt nicht einbinden, }
 { Ausgabeumleitungen mit '>' sind dann nicht möglich }

const
  nl = #13#10;
  version ='W. Hermanns, Dez. 2004';

const
  attr = $08;
var
  Gefunden : Boolean;
  DriveLetter : Char;
  StoppCode : Integer;
  Drive,
  Volume,
  Param2 : String;
  DirInfo : SearchRec;

function UpString(s1: String):String;
{ String in Großbuchstaben konvertieren }
var i: Word;
begin
  for i:=1 to length(s1) do s1[i] := Upcase(s1[i]);
  UpString := s1;
end;

begin
  { 1. Parameter: Datenträgerbezeichnung }
  Volume := Copy(UpString(ParamStr(1)),1,11);
  { 2. Parameter: Variable oder Option }
  Param2 := UpString(ParamStr(2));

  { Laufwerksbuchtaben ermittlen }
  Dirinfo.Name := '';
  DriveLetter := 'B';
  Gefunden := false;
  { Alle Laufwerke von C: bis Z: prüfen }
  repeat
    DriveLetter := char(ord(DriveLetter) + 1);
    FindFirst(DriveLetter+':*.*', Attr, DirInfo);
    Gefunden := (DosError = 0) AND (pos(Volume,DirInfo.Name) > 0)
  until (DriveLetter = 'Z') or (Gefunden);
  if Gefunden then
    { Gefunden: Laufwerksbuchstabe mit ':' ausgeben }
    Drive := DriveLetter + ':'
  else
    { Fehlercode 255 ausgeben }
    Drive := '255';

  { Parameter "/Q" unterdrückt die Ausgabe }
  if (Param2 <> '/Q') and (Param2 <> '-Q') then begin
    { Informationen im Format einer Batchdatei ausgeben }
    { Kurzhilfe als Kommentar anzeigen }
    writeln('@echo off',nl,
            'rem Aufruf:  getdrvl Volume [Variable] > Datei.BAT');
    writeln('rem oder     getdrvl Volume /q',nl,'rem ',version,nl);
    if Drive='255' then
      writeln('echo FEHLER: Laufwerk nicht gefunden!');
    if Param2 = '' then
      { Standardvariable DRVL setzen }
      writeln ('set DRVL=',Drive)
    else
      { Selbstdefinierte Variable setzen }
      writeln ('set ',Param2,'=',Drive);
  end;

  { Errorlevel ausgeben }
  { C:3, D:4, E:5 usw., Fehler: 255 }
  if Drive='255' then
    StoppCode := 255
  else
    StoppCode := Ord(Drive[1]) - 64;
  halt(StoppCode);
end.
Besondere Hinweise

Keine Haftung! Keine Garantie! Kein Support!

Rechte: Das Programm GetDrvL ist Freeware.

Quelle: www.w-hermanns.de