Per Batch alle Laufwerkbuchstaben auslesen aber Netzlaufwerke und CD-ROM ignorieren
Hallo erstmal. Das ist mein erster Beitrag in diesem Forum, habe hier schon sehr viele nützliche Tipps gefunden und bin mittlerweile so verzweifelt das ich mich jetzt selber angemeldet habe ;)
Mein Problem ist folgendes:
Ich möchte gerne für meine Firma ein Programm schreiben, welches einem normalen User es ermöglicht bestimmte Dinge ohne großen Support zu erledigen. Dieses Programm ist in mehrere Module geteilt und komplett in Batch geschrieben.
Ein Modul heist "Driver-Check" und soll alle Laufwerke auf Fehler überprüfen. Dabei sollen aber alle Netz- und CDROM-Laufwerke ignoriert werden. Ich hatte das Script auch schon so weit das er alles gemacht hat, bis eben CD-ROM Laufwerke ignorieren.. Hab dann so lange drann rumgeschusstert bis jetzt letztendlich garnichts mehr geht.. Deshalb hier erstmal der nicht funktionierende Code:
Leider übernimmt das hier nicht ganz meine Formatierung.. Ich schau mal das ichs noch anders hinbekomm ;)
Wenn ihr meine Fehler findet wäre ich euch echt dankbar wenn ihr sie mir auch mitteilt. Danke schon mal!
PS: Ach ja, hier der noch funktionierende Code.
Mein Problem ist folgendes:
Ich möchte gerne für meine Firma ein Programm schreiben, welches einem normalen User es ermöglicht bestimmte Dinge ohne großen Support zu erledigen. Dieses Programm ist in mehrere Module geteilt und komplett in Batch geschrieben.
Ein Modul heist "Driver-Check" und soll alle Laufwerke auf Fehler überprüfen. Dabei sollen aber alle Netz- und CDROM-Laufwerke ignoriert werden. Ich hatte das Script auch schon so weit das er alles gemacht hat, bis eben CD-ROM Laufwerke ignorieren.. Hab dann so lange drann rumgeschusstert bis jetzt letztendlich garnichts mehr geht.. Deshalb hier erstmal der nicht funktionierende Code:
@echo off
for %%a in (A C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
fsutil fsinfo volumeinfo %%a:\ >nul
ECHO %ERRORLEVEL% 1
IF NOT ERRORLEVEL 1 for /f "Tokens=3* delims=\ " %%i in ('fsutil fsinfo volumeinfo %%a:\^|find "Volumename"') do (
ECHO "%%a"
net use | find /i "%%a:" >nul
ECHO %ERRORLEVEL% 2
IF errorlevel 1 IF %%i! NEQ ! (
fsutil fsinfo drivetype %%a|findstr /c:"Eingebautes Laufwerk"
ECHO %ERRORLEVEL% 3
IF NOT ERRORLEVEL 1 (
IF %%a==C (
ECHO %%a: Windows
) else (
ECHO %%a: %%i
)
)
) else (
fsutil fsinfo drivetype %%a|findstr /c:"Austauschbares Laufwerk"
ECHO %ERRORLEVEL% 4
IF NOT ERRORLEVEL 1 (
ECHO %%a: %%i
)
)
ECHO %ERRORLEVEL% 5
IF errorlevel 1 IF %%i!==! ECHO %%a: Keine Bezeichnung
)
)
pause
Leider übernimmt das hier nicht ganz meine Formatierung.. Ich schau mal das ichs noch anders hinbekomm ;)
Wenn ihr meine Fehler findet wäre ich euch echt dankbar wenn ihr sie mir auch mitteilt. Danke schon mal!
PS: Ach ja, hier der noch funktionierende Code.
for %%a in (A C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
fsutil fsinfo volumeinfo %%a:\ >nul
IF ERRORLEVEL 0 for /f "Tokens=3* delims=\ " %%i in ('fsutil fsinfo volumeinfo %%a:\^|find "Volumename"') do (
IF %%a==C ECHO %%a: Windows
IF %%a NEQ C net use | find /i "%%a:" >NUL
IF errorlevel 1 IF %%i! NEQ ! ECHO %%a: %%i
IF errorlevel 1 IF %%i!==! ECHO %%a: Keine Bezeichnung
)
)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 98837
Url: https://administrator.de/contentid/98837
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
27 Kommentare
Neuester Kommentar
Hallo TheUntouchable,
deinen Code möchte ich nicht weiter auseinandernehmen, dich aber auf meinen Beitrag in
diesem Thread hinweisen.
cu paulepank
deinen Code möchte ich nicht weiter auseinandernehmen, dich aber auf meinen Beitrag in
diesem Thread hinweisen.
cu paulepank
Hallo TheUntouchable,
1. Stefans Lösung ist eleganter.
2. um den Ansatz
zu korrigieren, muß es heißen:
3. ist es nicht sehr günstig in einem Thread wieder ein neues Problem anzusprechen, dafür würde sich ein neuer Thread gut machen
cu paulepank
1. Stefans Lösung ist eleganter.
2. um den Ansatz
for /f "skip=1 Tokens=1,2 delims=:" %%i in ('wmic logicaldisk get caption,description^|find "Lokale Festplatte"') do ECHO %%i
for /f "delims= " %%i in ('wmic logicaldisk get caption^,description^|findstr /i "lokale festplatte"') do echo %%i
3. ist es nicht sehr günstig in einem Thread wieder ein neues Problem anzusprechen, dafür würde sich ein neuer Thread gut machen
cu paulepank
Hallo,
für weitere Batchexkurse:
leere Parameter werden so gestestet.
ja es funktioniert, aber muß auf c zwangsläufig Windows sein ?
EDIT: nein es funktioniert nicht
cu paulepank
für weitere Batchexkurse:
leere Parameter werden so gestestet.
ja es funktioniert, aber muß auf c zwangsläufig Windows sein ?
EDIT: nein es funktioniert nicht
cu paulepank
Moin,
meint ihr es so?
Anmerkungen:
Grüße
Biber
meint ihr es so?
:: ----snipp GetLocicalDrives.bat
@echo off
for /f "skip=1 Tokens=1,2" %%a in ('wmic logicaldisk where "DriveType=3" get name^, volumename') do (
IF "%%a"=="%SystemDrive%" (
ECHO %%a Windows
) else (
IF [%%b]== (ECHO %%a Keine Bezeichnung) else echo %%a %%b
)
)
pause
Anmerkungen:
- "DriveType=3" als WMIC-Bedingung finde ich sinnvoller als eine "Beschreibung LIKE 'bla'
- IF Laufwerk == %SystemDrive% ist besser als IF Laufwerk == C:
- und die Variable %%b lässt sich nicht mit DEFINED prüfen, weil es ja ohnehin keine Defined/Statische Variable ist.
Grüße
Biber
Moin paulepank,
dass beim SystemDrive immer nur "Windows" angezeigt wird habe ich von oben übernommen.
Würde ich auch nicht so machen.
Den zweiten Punkt kann ich nicht bestätigen. [Edit]...weil ich ihn nicht getestet habe, siehe unten...[/Edit]
Kompromissvorschlag:
Output:
["System" und "Daten" sind die kreativen Bezeichnungen meiner C:/D:-Laufwerke]
Grüße
Biber
dass beim SystemDrive immer nur "Windows" angezeigt wird habe ich von oben übernommen.
Würde ich auch nicht so machen.
Den zweiten Punkt kann ich nicht bestätigen. [Edit]...weil ich ihn nicht getestet habe, siehe unten...[/Edit]
Kompromissvorschlag:
@echo off
for /f "skip=1 Tokens=1,2" %%a in ('wmic logicaldisk where "Drivetype=3" get name^, volumename') do (
IF "%%a"=="%SystemDrive%" (
ECHO %%a %%b ^(Windows^)
) else (
IF [%%b]== (ECHO %%a Keine Bezeichnung) else echo %%a %%b
)
)
pause
(=20:20:03 D:\temp=)
>e:\schnipsel\Logicaldrives.bat
C: System (Windows)
D: Daten
Grüße
Biber
Mein Gott, paulepank,
Du kannst aber auch stur sein...
Aber Recht hast Du - in diesem Fall (kein Volumename-Parameter %%b geht raus) scheint M$ wieder mal die Output-Zeile nicht mit CRLF abzuschließen, sondern nur mit LF.
Oder nur mit CR. Oder mit CRCRLF Irgend so ein Praktikantenpfusch halt.
Das bringt immer den FOR/F Befehl durcheinander, kenn ich schon vom FsUtil-Befehl.
Anyhow, dann halt so.
Output mit gelöschtem D.-Volumenamen:
Besser?
Grüße
Biber
Du kannst aber auch stur sein...
Aber Recht hast Du - in diesem Fall (kein Volumename-Parameter %%b geht raus) scheint M$ wieder mal die Output-Zeile nicht mit CRLF abzuschließen, sondern nur mit LF.
Oder nur mit CR. Oder mit CRCRLF Irgend so ein Praktikantenpfusch halt.
Das bringt immer den FOR/F Befehl durcheinander, kenn ich schon vom FsUtil-Befehl.
Anyhow, dann halt so.
::--- LogicalDrives.bat v03.
@echo off
for /f "skip=1 Tokens=1,2" %%a in (
'wmic logicaldisk where "Drivetype=3" get name^, volumename') do (
call :displayIt %%a %%b "Keine Bezeichnung")
pause
goto :eof
:displayIt
IF "%1"=="%SystemDrive%" (
ECHO %1 %~2 ^(Windows^)
) else (
ECHO %1 %~2
)
Goto :eof
(=21:20:34 D:\temp=)
>e:\schnipsel\Logicaldrives.bat
C: System (Windows)
D: Keine Bezeichnung
Drücken Sie eine beliebige Taste . . .
Besser?
Grüße
Biber
Moin Theo Tatschebell,
wenn's weiter nichts ist...
Output:
Grüße
Biber
wenn's weiter nichts ist...
:: -----snipp LogicalDrives.bat v.04
@echo off
for /f "skip=1 Tokens=1,*" %%a in (
'wmic logicaldisk where "Drivetype=3" get name^, volumename') do (
call :displayIt %%a "%%~b" "Keine Bezeichnung")
pause
goto :eof
:displayIt
IF "%1"=="%SystemDrive%" (
ECHO %1 %~2 ^(Windows^)
) else (
ECHO %1 %~2
)
Goto :eof
Output:
(=21:51:51 D:\temp=)
>e:\schnipsel\Logicaldrives.bat
C: System XP (Windows)
D: Daten
Drücken Sie eine beliebige Taste . . .
Grüße
Biber