Per Batch freien Laufwerksbuchstaben ermitteln
Es soll per Batch eine verschlüsselte Datei als Laufwerk eingebunden werden, von dem ich den Laufwerksbuchstaben für die Weiterverarbeitung benötige. Diese Batch soll auf verschiedensten Rechnern zum Einsatz kommen. Deshalb kann ich den Laufwerksbuchstaben nicht vorher festlegen.
Leider brachte googeln keine brauchbaren Tips. Hier im Forum habe ich schon viele gute Tips zu Batch-Scripts bekommen. Würde mich freuen, wenn jemand zu meinem Problem auch einen guten Tip hat.
Ich kann bisher alle vergebenen Laufwerksbuchstaben per For-Schleife abfragen:
:codeAnfang
for %%i in ( e f g h i j k l m n o p q r s t u v w x y z ) do ( dir %%i: >>Dir.txt )
for /F "tokens=3" %%i in ('type "Dir.txt" ^|findstr "e: f: g: h: i: j: k: l: m: n: o: p: q: r: s: t: u: v: w:"') do ( echo %%i >>LW.txt)
:codeEnde
Damit bin ich nun in der Lage die Laufwerke nach dem Vorhandensein einer bestimmten Datei zu überprüfen.
Will ich nun aber wissen, welche Laufwerksbuchstaben noch frei sind, kann ich nicht einfach eines der übrigen Laufwerke nehmen, da CD/DVD-Laufwerke und Kartenlesegeräte mit dem Dir-Befehl (wenn kein Datenträger eingelegt ist) nicht auf stdout ausgegeben werden. Ich kann nur den stderr mit 2>1& auf stdout umleiten und bekomme jetzt auch die Fehlermeldungen für die Wechseldatenträger-Laufwerke. Der Haken ist, dass ich leider aus der Ausgabe nicht ermitteln kann, welches Laufwerk nun den Fehler "Laufwerk nicht bereit" (für CD- und Karten-LW) zurück gibt.
Will ich mit "if not exist x:/NUL" die Laufwerke nacheinander "abgrasen", bekomme ich beim ersten CD-LW oder Kartenleser eine häßliche Windows-Meldung im separaten Fenster: "Laufwerk nicht bereit" und das Script stopt, bis eine Schaltfläche gedrückt wird. Das muss ich vermeiden.
Ich wäre sehr dankbar für Eure Hilfe. Leider sitzt mir ein bischen die Zeit im Nacken.
Leider brachte googeln keine brauchbaren Tips. Hier im Forum habe ich schon viele gute Tips zu Batch-Scripts bekommen. Würde mich freuen, wenn jemand zu meinem Problem auch einen guten Tip hat.
Ich kann bisher alle vergebenen Laufwerksbuchstaben per For-Schleife abfragen:
:codeAnfang
for %%i in ( e f g h i j k l m n o p q r s t u v w x y z ) do ( dir %%i: >>Dir.txt )
for /F "tokens=3" %%i in ('type "Dir.txt" ^|findstr "e: f: g: h: i: j: k: l: m: n: o: p: q: r: s: t: u: v: w:"') do ( echo %%i >>LW.txt)
:codeEnde
Damit bin ich nun in der Lage die Laufwerke nach dem Vorhandensein einer bestimmten Datei zu überprüfen.
Will ich nun aber wissen, welche Laufwerksbuchstaben noch frei sind, kann ich nicht einfach eines der übrigen Laufwerke nehmen, da CD/DVD-Laufwerke und Kartenlesegeräte mit dem Dir-Befehl (wenn kein Datenträger eingelegt ist) nicht auf stdout ausgegeben werden. Ich kann nur den stderr mit 2>1& auf stdout umleiten und bekomme jetzt auch die Fehlermeldungen für die Wechseldatenträger-Laufwerke. Der Haken ist, dass ich leider aus der Ausgabe nicht ermitteln kann, welches Laufwerk nun den Fehler "Laufwerk nicht bereit" (für CD- und Karten-LW) zurück gibt.
Will ich mit "if not exist x:/NUL" die Laufwerke nacheinander "abgrasen", bekomme ich beim ersten CD-LW oder Kartenleser eine häßliche Windows-Meldung im separaten Fenster: "Laufwerk nicht bereit" und das Script stopt, bis eine Schaltfläche gedrückt wird. Das muss ich vermeiden.
Ich wäre sehr dankbar für Eure Hilfe. Leider sitzt mir ein bischen die Zeit im Nacken.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 58915
Url: https://administrator.de/contentid/58915
Ausgedruckt am: 26.11.2024 um 12:11 Uhr
5 Kommentare
Neuester Kommentar
Moin bossjo,
willkommen im Forum.
1.) WTF is Google? *gg
2.) ich würde den Umweg über einen VBS-Schnipsel wählen, wie in diesen beiden Beiträgen beschrieben:
Installationspfad einer unbekannten Anwendung suchen auf unbekanntem PC
-oder -
Festplattengröße auslesen
In beiden Beitgägen wird skizziert, wie Du über FileSystemInfo.Drives.DriveType ein CD-Laufwerk von einem Netz- oder lokalen Laufwerk unterscheiden kannst und wie Du mit ...IsReady feststellen kannst, ob das Laufwerk bereit ist.
Das von Dir beschriebene Verhalten mit der hässlichen Popup-GUI-Fehlermeldung kommt NICHT immer bzw. nicht auf allen Rechnern.
Bei mir funktioniert auch ein
[Nur L: wird ausgegeben, G:, H: I: und J: sind CD-Laufwerke; G: und H: sogar mit offenem Schacht]
Diese GUI-Fehlermeldung habe ich aber auch schon gesehen - muss an irgendeiner Registry-Einstellung liegen, aber genauer weiß ich es nicht.
Gruss
Biber
willkommen im Forum.
1.) WTF is Google? *gg
2.) ich würde den Umweg über einen VBS-Schnipsel wählen, wie in diesen beiden Beiträgen beschrieben:
Installationspfad einer unbekannten Anwendung suchen auf unbekanntem PC
-oder -
Festplattengröße auslesen
In beiden Beitgägen wird skizziert, wie Du über FileSystemInfo.Drives.DriveType ein CD-Laufwerk von einem Netz- oder lokalen Laufwerk unterscheiden kannst und wie Du mit ...IsReady feststellen kannst, ob das Laufwerk bereit ist.
Das von Dir beschriebene Verhalten mit der hässlichen Popup-GUI-Fehlermeldung kommt NICHT immer bzw. nicht auf allen Rechnern.
Bei mir funktioniert auch ein
>for %i in (b g h i j k l m n o p) do @if exist %i:/nul echo %i
l
[Nur L: wird ausgegeben, G:, H: I: und J: sind CD-Laufwerke; G: und H: sogar mit offenem Schacht]
Diese GUI-Fehlermeldung habe ich aber auch schon gesehen - muss an irgendeiner Registry-Einstellung liegen, aber genauer weiß ich es nicht.
Gruss
Biber
Hallo,
das Kommando SUBST kann hier weiterhelfen.
In einer Schleife kann man mit SUBST versuchen nacheiander einen auf allen Rechnern existierendes Verzeichnis (z.B. %SystemRoot%) einzubinden.
Sofern %ERRORLEVEL% gleich 0 hat man es gefunden , merkt sich den Laufwerksbuchstaben und hebt die Einbindung wieder auf.
Ich habe keinen Code formuliert, da du offensichtlich selbst dazu in der Lage bist.
cu paulepank
das Kommando SUBST kann hier weiterhelfen.
In einer Schleife kann man mit SUBST versuchen nacheiander einen auf allen Rechnern existierendes Verzeichnis (z.B. %SystemRoot%) einzubinden.
Sofern %ERRORLEVEL% gleich 0 hat man es gefunden , merkt sich den Laufwerksbuchstaben und hebt die Einbindung wieder auf.
Ich habe keinen Code formuliert, da du offensichtlich selbst dazu in der Lage bist.
cu paulepank
Moin bossjo,
Antwort auf Deine Frage: Du musst noch ein paar Steuerzeichen/Zeichen mit spezieller Bedeutung maskieren. Und zwar:
[Frag nicht, nimm es einfach hin...*gg]
Desweiteren solltest Du abwägen, ob Du das erste gefundene Laufwerk gemäß Kriterien haben willst oder das letzte.
Wenn das Letzte: Dann hast Du alles richtig.
Wenn das Erste: Dann solltest Du schreiben: .....Do if not defined LW set "LW=%%j )
Gruss
Biber
Antwort auf Deine Frage: Du musst noch ein paar Steuerzeichen/Zeichen mit spezieller Bedeutung maskieren. Und zwar:
...
for /f %%i in ('dir %%i:\<b> ^2^>^&^1 </b>^|FindStr /C:"Das System kann"') do ...
[Frag nicht, nimm es einfach hin...*gg]
Desweiteren solltest Du abwägen, ob Du das erste gefundene Laufwerk gemäß Kriterien haben willst oder das letzte.
Wenn das Letzte: Dann hast Du alles richtig.
Wenn das Erste: Dann solltest Du schreiben: .....Do if not defined LW set "LW=%%j )
Gruss
Biber