Windows 10 Batch: Wie in FOR-Schleife Befehlsausgabe in Variable?
@echo off
setlocal enabledelayedexpansion
set Drive=
FOR %%f IN (A B 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 if exist %%f:\ (
fsutil fsinfo driveType %%f:
pause
)
Gibt z.B.: unter anderem den String (Text)
C: - Eingebautes Laufwerk
am Bildschirm aus.
Die FOR-Schleife gibt für jeden vorhandenen Laufwerksbuchstaben nacheinander einen derartigen String aus.
Frage:
Wie bekomme ich diesen String innerhalb des zweiten Klammerpaares in die Text-Variable Drive?
Hinweis:
In bzw. ab Zeile 6 stehen mehrere weitere Befehle.
Das “pause“ ist hier nur ein Platzhalter.
An dieser Stelle muss der jeweilige String (im Beispiel „C: - Eingebautes Laufwerk“ in der temporären Text-Variablen Drive gespeichert werden.
Hintergrund meiner Frage:
Dies Variable Drive muss ich innerhalb des zweiten Klammerpaares jeweils zwei mal hintereinander „bearbeiten“.
Der Text ab dem 6-ten Zeichen muss innerhalb des zweiten Klammerpaares mit IF ausgewertet werden.
Wenn die Bedingung erfüllt ist,
werden die ersten zwei Zeichen der Variablen Drive innerhalb des zweiten Klammerpaares für einen weiteren Befehl als Parameter benötigt.
Mein Problem:
Ich bekomme den String innerhalb des zweiten Klammerpaares nicht in die Variable Drive.
Syntax-Problem!
Ich bedanke mich im Voraus für Hilfe - den Code.
Dies ist meine erste Frage.
Sollte ich diese in der falschen Kategorie gestellt haben, bitte Hinweis und verschieben.
setlocal enabledelayedexpansion
set Drive=
FOR %%f IN (A B 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 if exist %%f:\ (
fsutil fsinfo driveType %%f:
pause
)
Gibt z.B.: unter anderem den String (Text)
C: - Eingebautes Laufwerk
am Bildschirm aus.
Die FOR-Schleife gibt für jeden vorhandenen Laufwerksbuchstaben nacheinander einen derartigen String aus.
Frage:
Wie bekomme ich diesen String innerhalb des zweiten Klammerpaares in die Text-Variable Drive?
Hinweis:
In bzw. ab Zeile 6 stehen mehrere weitere Befehle.
Das “pause“ ist hier nur ein Platzhalter.
An dieser Stelle muss der jeweilige String (im Beispiel „C: - Eingebautes Laufwerk“ in der temporären Text-Variablen Drive gespeichert werden.
Hintergrund meiner Frage:
Dies Variable Drive muss ich innerhalb des zweiten Klammerpaares jeweils zwei mal hintereinander „bearbeiten“.
Der Text ab dem 6-ten Zeichen muss innerhalb des zweiten Klammerpaares mit IF ausgewertet werden.
Wenn die Bedingung erfüllt ist,
werden die ersten zwei Zeichen der Variablen Drive innerhalb des zweiten Klammerpaares für einen weiteren Befehl als Parameter benötigt.
Mein Problem:
Ich bekomme den String innerhalb des zweiten Klammerpaares nicht in die Variable Drive.
Syntax-Problem!
Ich bedanke mich im Voraus für Hilfe - den Code.
Dies ist meine erste Frage.
Sollte ich diese in der falschen Kategorie gestellt haben, bitte Hinweis und verschieben.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2361873801
Url: https://administrator.de/contentid/2361873801
Ausgedruckt am: 22.11.2024 um 00:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo MWenzel,
deine konkrete Frage war
Auf der verlinkten Seite ist zu lesen:
Ich gehe davon aus, dass du Englisch verstehst, ansonsten kann man die Seite auch übersetzen.
Weiterhin solltest du bei der Verwendung von Variablen in Schleifen folgendes beachten:
EnableDelayedExpansion / FOR Loops
NikosLykos
deine konkrete Frage war
Mein Problem:
Ich bekomme den String innerhalb des zweiten Klammerpaares nicht in die Variable Drive.
Syntax-Problem!
Ich bekomme den String innerhalb des zweiten Klammerpaares nicht in die Variable Drive.
Syntax-Problem!
Auf der verlinkten Seite ist zu lesen:
The FOR /F command is the answer to innumerable questions where you want to take the output of some command, store it in a variable, then do something with the result.
Außerdem:FOR /F processing of a command consists of reading the output from the command one line at a time and then breaking the line up into individual items of data or 'tokens'. The DO command is then executed with the parameter(s) set to the token(s) found.
Ich gehe davon aus, dass du Englisch verstehst, ansonsten kann man die Seite auch übersetzen.
Weiterhin solltest du bei der Verwendung von Variablen in Schleifen folgendes beachten:
EnableDelayedExpansion / FOR Loops
NikosLykos
Servus,
das kann man zwar über die Ausgabe von fsutil machen, ist aber aus einem guten Grund unzuverlässig: Es ist sprachabhängig. Den Datenträger-Typ bekommst du per Batch sprachunabhängig besser gleich über WMI
https://docs.microsoft.com/de-de/windows/win32/cimwin32prov/win32-logica ...
Willst du warum auch immer bei der fsutil Variante bleiben auch das geht natürlich wenn auch der Nachteil der Sprachlokalisation für einen Vergleich bleibt.
Grüße Uwe
das kann man zwar über die Ausgabe von fsutil machen, ist aber aus einem guten Grund unzuverlässig: Es ist sprachabhängig. Den Datenträger-Typ bekommst du per Batch sprachunabhängig besser gleich über WMI
@echo off &setlocal enabledelayedexpansion
FOR %%a IN (A B 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 if exist %%a: (
for /f "tokens=2 delims==" %%b in ('wmic logicaldisk where "DeviceId = '%%a:'" get DriveType /value') do for /f "delims=" %%c in ("%%b") do set drivetype=%%c
if "!drivetype!" == "0" echo Laufwerk %%a: ist vom Typ "unbekannt"
if "!drivetype!" == "1" echo Laufwerk %%a: ist vom Typ "Kein Stammverzeichnis"
if "!drivetype!" == "2" echo Laufwerk %%a: ist vom Typ "Wechseldatentraeger"
if "!drivetype!" == "3" echo Laufwerk %%a: ist vom Typ "Lokaler Datentraeger"
if "!drivetype!" == "4" echo Laufwerk %%a: ist vom Typ "Netzlaufwerk"
if "!drivetype!" == "5" echo Laufwerk %%a: ist vom Typ "Compact Disc"
if "!drivetype!" == "6" echo Laufwerk %%a: ist vom Typ "RAM-Datentraeger"
)
Willst du warum auch immer bei der fsutil Variante bleiben auch das geht natürlich wenn auch der Nachteil der Sprachlokalisation für einen Vergleich bleibt.
@echo off &setlocal enabledelayedexpansion
FOR %%a IN (A B 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 if exist %%a: (
set "drive=%%a:"
for /f "tokens=1,* delims=- " %%b in ('fsutil fsinfo drivetype %%a:') do set "drivetype=%%c"
echo Laufwerk !drive! ist vom Typ "!drivetype!"
)
Grüße Uwe