Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Per Batch freien Laufwerksbuchstaben ermitteln

Mitglied: bossjo

bossjo (Level 1) - Jetzt verbinden

13.05.2007, aktualisiert 18.10.2012, 21158 Aufrufe, 5 Kommentare

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.
Mitglied: Biber
14.05.2007, aktualisiert 18.10.2012
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
01.
>for %i in (b g h i j k l m n o p) do @if exist %i:/nul echo %i 
02.
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
Bitte warten ..
Mitglied: bossjo
14.05.2007 um 09:32 Uhr
Guten Morgen biber,
erstmal vielen Dank und fettes Lob für die schnelle Antwort.
Leider kenn ich mich mit VBS überhaupt nicht aus und kann dem ganzen auch nicht folgen.
Ich hab nochmal einen Gedankenansatz. Ich würde gerne die stderr-Ausgabe von Dir-Befehl in der For-Schleife weiter verwenden. Leider klappt es mit der Umleitung von stderr nicht. Ich bekomme immer die Meldung: "|" syntaktisch an dieser Stelle falsch

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 (
for %%j in ('Dir %%i:\ 2>1& ^|findstr /C:"Das System kann den angegebenen Pfad nicht finden."') do ( set LW=%%j ))

Wenn ich

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:\ 2>%%i.txt)

nehme, funktioniert das, kann aber die Ausgabe nicht über die pipe als Variable setzten.
Bitte warten ..
Mitglied: paulepank
14.05.2007 um 09:37 Uhr
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
Bitte warten ..
Mitglied: Biber
14.05.2007 um 09:55 Uhr
Moin bossjo,

Antwort auf Deine Frage: Du musst noch ein paar Steuerzeichen/Zeichen mit spezieller Bedeutung maskieren. Und zwar:
01.
... 
02.
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
Bitte warten ..
Mitglied: bossjo
14.05.2007 um 17:09 Uhr
Juppii Juppii Heeeeeee, Das is es. Es funktioniert
Danke für die superschnelle und kompotente Hilfe. Auch der Hinweis mit IF DEFINED war spitze und hat mir die nächste Frage vorweg genommen. Hätte ich mich mal vorher hier im Forum gemeldet, dann wären mir 2 Tage Tüftelei erspart geblieben. Nun ist mein Script fertig. Vielleicht kann ja die Nachwelt was damit anfangen. Die Anwendung ist simple. Ein User erhält einen Stick mit verschlüsselten Daten. Diese sollen automatisch entschlüsselt und bearbeitet werden können.
Der Ablauf im Script soll folgendermaßen passieren:
Der Stick mit einer verschlüsselten Datei wird an den USB-Port gesteckt. Danach wird das Script gestartet. Ersteinmal wird geprüft, welchen Laufwerksbuchstaben der Stick bekommen hat und nach einem bestimmten Dateinamen gesucht. Dann wird geprüft, welcher Laufwerksbuchstabe als nächstes frei ist und anschließend die verschlüsselte Datei mit TrueCrypt als Laufwerk eingehängt. Die Anwendung, die die verschlüsselten Daten verwendet wird gestartet mit Angabe des Datenpfades. Nach Ende der Anwendung wird automatisch das gemountete Laufwerk wieder ausgehängt.

Hier nun das Script in abgespeckter Version:
01.
::Scriptanfang 
02.
@echo off 
03.
@rem **** Stick suchen und Parameter %Stick% setzten 
04.
:FINDSTICK 
05.
set LWBSTB=e:\ f:\ g:\ h:\ i:\ j:\ k:\ l:\ m:\ n:\ o:\ p:\ q:\ r:\ s:\ t:\ u:\ v:\ w:\ 
06.
 
07.
set Stick= 
08.
@rem **** existierene Laufwerke ermitteln, Laufwerksbuchstaben filtern und nach Datei "Geheim" suchen 
09.
for %%i in ( %LWBSTB% ) do ( 
10.
	for /F "tokens=3" %%j in ( '@dir %%i ^2^>^&^1 ^|findstr "%LWBSTB%"') do ( 
11.
		for %%k in (%%j) do ( 
12.
			if defined Stick (goto :FINDLAUFWERK) else (if exist "%%k"Geheim (Set Stick=%%k) ))) 
13.
14.
if %Stick%!==! goto STICKMESSAGE 
15.
 
16.
@rem **** Mount-Laufwerk festlegen 
17.
@rem **** ersten freien Laufwerksbuchstaben finden und CD/DVD bzw. Kartenlesegeräte ausschließen 
18.
:FINDLAUFWERK 
19.
set LWM= 
20.
 
21.
for %%i in ( %LWBSTB% ) do ( 
22.
	for /f %%j in ( '@Dir %%i ^2^>^&^1 ^|findstr /X /C:"Das System kann den angegebenen Pfad nicht finden."' ) do ( 
23.
		 if defined LWM (goto :FOUND) else (set LWM=%%i) ) 
24.
25.
if %LWM%!==! goto NOFREELW 
26.
 
27.
:Found 
28.
cls 
29.
echo. 
30.
echo Stick gefunden als Laufwerk %Stick% 
31.
echo erstes freies Laufwerk = %LWM% 
32.
pause 
33.
EOF 
34.
 
35.
@rem ####### verschlüsselte Datei als Laufwerk einbinden ########### 
36.
:MOUNT 
37.
cls 
38.
echo. 
39.
echo Bitte warten, Verschlsseltes Laufwerk wird eingebunden .... 
40.
echo. 
41.
TrueCrypt.exe /q /a /m rm /v /k key "%Stick%\Geheim" /l%LWM% 
42.
 
43.
@rem **** Anwendung Starten, die die verschlüsselten Dateien verwendet 
44.
:STARTPRG 
45.
start Anwendung.exe /%LWM%(PfadZuDenDaten) 
46.
 
47.
@rem **** Mount-Laufwerk wieder trennen 
48.
:UMOUNT 
49.
TrueCrypt.exe /q /d %LWM% /f 
50.
goto EXIT 
51.
 
52.
 
53.
@rem ############### Fehlermeldungen ################### 
54.
:NOFREELW 
55.
@echo Kein Laufwerksbuchstabe mehr frei 
56.
pause 
57.
goto EXIT 
58.
 
59.
:STICKMESSAGE 
60.
@echo Kein Stick mit verschluesselter Datei gefunden 
61.
pause 
62.
goto EXIT 
63.
 
64.
:EXIT 
65.
 
66.
::Scriptende
Wie gesagt, ist es ist nur eine abgespeckte Version. Im Original fange ich noch alle erdenklichen Fehler ab und gebe z.B. mit msgbox Informationen oder Meldungen aus und Auswahl- und Eingabemöglichkeiten für den Anwender. Außerdem werden Verzeichnisse aufgelistet und dem User zur Auswahl angezeigt, Zip-Archive erstellt und entpackt, überprüft ob bestimmte Anwendungen laufen und wenn notwendig beendet oder gestartet usw.

Vielen Dank an Biber und paulepank ( Der Hinweis mit SUBST bringt wieder neue Ideen für meine nächsten Batch-Scripts.)
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch - Nur Laufwerksbuchstabe ausgeben
gelöst Frage von padrichBatch & Shell2 Kommentare

Hallo zusammen! Ich habe vor eine Batch zu schreiben, welche mit den Laufwerkbuchstaben vom Laufwerk "Acer" löscht. Bis jetzt ...

Windows Server

Keine Laufwerksbuchstaben mehr frei - was ist der beste Weg bei Win 2012 R2

Frage von Rene1976Windows Server10 Kommentare

Hallo, ich will ein RAID 1 von Win 2003 auf ein RAID 1 im Win 2012 R2 umziehen und ...

Batch & Shell

Batch oder PS um Datenvolumen zu ermitteln

gelöst Frage von rudeboyBatch & Shell13 Kommentare

Guten Morgen zusammen, ist es möglich mit Hilfe von Batch oder PS-Skript die über die Netzwerkschnittstelle übertragene Datenmenge zB ...

Batch & Shell

Belegter sowie freier Speicherplatz ermitteln und vergleichen

gelöst Frage von m.fesslerBatch & Shell13 Kommentare

Hallo zusammen, ich möchte mittels einer Batch den belegten Speicherplatz auf Laufwerk A sowie den freien Speicherplatz auf Laufwerk ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 5 StundenWindows 103 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 8 StundenAdministrator.de Feedback10 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 1 TagHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 1 TagGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Server-Hardware
Welche Rolle spielt Design bei Enterprise IT Hardware?
Frage von ApolloXServer-Hardware17 Kommentare

Ich arbeite für einen internationalen Elektronikhersteller in der Forschung und meine Aufgabe ist es, Feedback von Nutzern in Hinsicht ...

Windows Netzwerk
WSUS4 und Windows 10 Updates automatisch installieren
Frage von sammy65Windows Netzwerk15 Kommentare

Hallo miteinander, ich habe mit einen neuen WSUS Server aufgesetzt Server 2016 darauf einen aktuellen WSUS. Grund, wir stellen ...

Speicherkarten
Vergessliche USB-Sticks?
Frage von hanheikSpeicherkarten14 Kommentare

Ich habe in den letzten Tagen 500 USB-Sticks mit Bilddateien bespielt. Obwohl ich die Dateien mit größter Sorgfalt kopiert ...

Switche und Hubs
Cisco SG350X-48 AdminIP in anderes VLAN
Frage von lcer00Switche und Hubs14 Kommentare

Hallo zusammen, ich habe ein Problem mir einem Cisco SG350X-48 bei der Erstinstallation wurde eine IP 192.168.0.254 (Default VLAN ...