Problem bzw. Frage zum Abfangen einer Ausgabe mit FOR
Hallo
Ich hab hier eine Frage die mcih grade beschäftigt.
Normalerweise kann man ja, wenn man die Ausgabe eines Befehls in Variabeln speichern will entweder diese Ausgabe in eine datei schreibven lassen und diese Datei auslesen oder direkt, also ohne temponäre Datei, die Ausgabe des Befehls abfangen.
Bsp1:
Scheinbar funktioniert dies aber nicht immer. Anders kann ich mir jedenfalls folgendes Verhalten nicht erklären.
Batch1:
Batch2:
Batch3:
miniversum
Ich hab hier eine Frage die mcih grade beschäftigt.
Normalerweise kann man ja, wenn man die Ausgabe eines Befehls in Variabeln speichern will entweder diese Ausgabe in eine datei schreibven lassen und diese Datei auslesen oder direkt, also ohne temponäre Datei, die Ausgabe des Befehls abfangen.
Bsp1:
dir /b>Datei.txt
FOR /F "tokens=1 delims=" %%i in ('type Datei.txt') do set "LetzteDatei=%%i"
echo [LetzteDatei]
Bsp2:FOR /F "tokens=1 delims=" %%i in ('type Datei.txt') do set "LetzteDatei=%%i"
echo [LetzteDatei]
FOR /F "tokens=1 delims=" %%i in ('dir /b') do set "LetzteDatei=%%i"
echo [LetzteDatei]
Bsp1 und Bsp2 würden das gleiche Ergebnis bringen, nur das Bsp2 ohne temponäre Datei auskommt.echo [LetzteDatei]
Scheinbar funktioniert dies aber nicht immer. Anders kann ich mir jedenfalls folgendes Verhalten nicht erklären.
Batch1:
@echo off & setlocal
FOR /F "skip=1 tokens=24,26,47,48 delims= " %%i in ('wmic os') do set "InstallDate=%%i" & set "LastBootUpTime=%%j" & set "RegisteredUser=%%k" & set "SerialNumber=%%l"
echo [%InstallDate%] [%LastBootUpTime%] [%RegisteredUser%] [%SerialNumber%]
Funktioniert nicht! Die ausgelesenen Werte sind falsch und blödsinn.FOR /F "skip=1 tokens=24,26,47,48 delims= " %%i in ('wmic os') do set "InstallDate=%%i" & set "LastBootUpTime=%%j" & set "RegisteredUser=%%k" & set "SerialNumber=%%l"
echo [%InstallDate%] [%LastBootUpTime%] [%RegisteredUser%] [%SerialNumber%]
Batch2:
@echo off & setlocal
wmic os get InstallDate,LastBootUpTime,RegisteredUser,SerialNumber>Datei.txt
FOR /F "skip=1 tokens=1,2,3,4 delims= " %%i in ('type Datei.txt') do set "InstallDate=%%i" & set "LastBootUpTime=%%j" & set "RegisteredUser=%%k" & set "SerialNumber=%%l"
del Datei.txt
echo [%InstallDate%] [%LastBootUpTime%] [%RegisteredUser%] [%SerialNumber%]
Funktioniert! Ergebniss ist auch das gewünschte.wmic os get InstallDate,LastBootUpTime,RegisteredUser,SerialNumber>Datei.txt
FOR /F "skip=1 tokens=1,2,3,4 delims= " %%i in ('type Datei.txt') do set "InstallDate=%%i" & set "LastBootUpTime=%%j" & set "RegisteredUser=%%k" & set "SerialNumber=%%l"
del Datei.txt
echo [%InstallDate%] [%LastBootUpTime%] [%RegisteredUser%] [%SerialNumber%]
Batch3:
@echo off & setlocal
FOR /F "skip=1 tokens=1,2,3,4 delims= " %%i in ('wmic os get InstallDate,LastBootUpTime,RegisteredUser,SerialNumber') do set "InstallDate=%%i" & set "LastBootUpTime=%%j" & set "RegisteredUser=%%k" & set "SerialNumber=%%l"
echo [%InstallDate%] [%LastBootUpTime%] [%RegisteredUser%] [%SerialNumber%]
Funktioniert nicht! Aber warum? Kann mir jemand erklären warum es so nciht funktioniert?FOR /F "skip=1 tokens=1,2,3,4 delims= " %%i in ('wmic os get InstallDate,LastBootUpTime,RegisteredUser,SerialNumber') do set "InstallDate=%%i" & set "LastBootUpTime=%%j" & set "RegisteredUser=%%k" & set "SerialNumber=%%l"
echo [%InstallDate%] [%LastBootUpTime%] [%RegisteredUser%] [%SerialNumber%]
miniversum
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 82560
Url: https://administrator.de/contentid/82560
Ausgedruckt am: 03.12.2024 um 17:12 Uhr
2 Kommentare
Neuester Kommentar
Moin miniversum,
in der dritten Abfrage machen die Kommas in der WMIC-Abfrage die Probleme.
Wenn Du entweder jedes Komma mit einem "^" maskierst ...
- ODER -
aber die in einfachen Anführungszeichen stehende WMIC-Abfrage zusätzlich in doppelte Anfü-zeichen packst, dann geht es.
Die erste Abfrage habe ich mir nicht weiter angeschaut, aber vermutlich, nein sicher macht die Anzahl der Paramter Probleme.
Wie hatten das schonmal in einem beitrag hier im Forum bei einer CSV-Datei mit x Werten.
Dabei stellt sich dann raus, dass die Tokens in einer For-Anweisung nur von 1 bis (??)..bis 31 oder so gültig sind.
Quicktest:
Der untere Fall offenbart das Elend... Token 31 kann noch, token 32 nicht mehr direkt angesprochen werden.
Dazu musst zwei ineinander geschraubte FOR-Anweisungen machen mit "tokens=1-30,*" und den Rest "*" in einer nachgeschalteten FOR /F-Anweisung abfackeln.
Grüße und schönes Wochenende
Biber
in der dritten Abfrage machen die Kommas in der WMIC-Abfrage die Probleme.
Wenn Du entweder jedes Komma mit einem "^" maskierst ...
- ODER -
aber die in einfachen Anführungszeichen stehende WMIC-Abfrage zusätzlich in doppelte Anfü-zeichen packst, dann geht es.
FOR /F "skip=1 tokens=1-3,*" %i in ('"wmic os get InstallDate,LastBootUpTime,SerialNumber,RegisteredUser"') do @echo [%i] [%j] [%k] [%l]
-oder-
FOR /F "skip=1 tokens=1-3,*" %i in ('wmic os get InstallDate^,LastBootUpTime^,SerialNumber^,RegisteredUser') do @echo [%i] [%j] [%k] [%l]
Die erste Abfrage habe ich mir nicht weiter angeschaut, aber vermutlich, nein sicher macht die Anzahl der Paramter Probleme.
Wie hatten das schonmal in einem beitrag hier im Forum bei einer CSV-Datei mit x Werten.
Dabei stellt sich dann raus, dass die Tokens in einer For-Anweisung nur von 1 bis (??)..bis 31 oder so gültig sind.
Quicktest:
(=16:47:02 D:\temp=)
>for /f "tokens=30,31" %a in ("1 2 3 4 5 6 7 8 9 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 0 1 2 3 4 5 6") do @echo %a %b
u v
(=16:47:08 D:\temp=)
>for /f "tokens=30,32" %a in ("1 2 3 4 5 6 7 8 9 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 0 1 2 3 4 5 6") do @echo %a %b
u %b
Dazu musst zwei ineinander geschraubte FOR-Anweisungen machen mit "tokens=1-30,*" und den Rest "*" in einer nachgeschalteten FOR /F-Anweisung abfackeln.
Grüße und schönes Wochenende
Biber