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

Frage Entwicklung Batch & Shell

Mitglied: bossjo

bossjo (Level 1) - Jetzt verbinden

13.05.2007, aktualisiert 18.10.2012, 21001 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
Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 11 StundenBatch & Shell8 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 13 StundenHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 1 TagMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 1 TagSicherheit1 Kommentar

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Heiß diskutierte Inhalte
Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server17 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...

Windows 10
Bitlocker nach Verschlüsselung nicht mehr aufrufbar!
gelöst Frage von alexlazaWindows 1013 Kommentare

Hallo, ich besitze ein HP ZBook 17 G4 mit einem Windows 10 Pro Betriebssystem. Bei diesem Problem handelt sich, ...

Batch & Shell
Neuste Datei via PowerShell kopieren
gelöst Frage von kaiuwe28Batch & Shell11 Kommentare

Hallo zusammen, ich hatte mir mit Hilfe der Suche im Forum einen kleinen Code von colinardo rausgesucht und versucht ...