1.3k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von
Hallo (hoffentlcih nicht offtopc)
habe folgendes (unter XPpro):

@echo off
systeminfo | find "Systembetriebszeit" >tmp.txt
FOR /F %%i in (tmp.txt) do (
echo %%i
)
pause

Leider wird immer nur das "erste Wort" der erwarteten Zeile ausgeschrieben (bzw. ist in die Variable überführt):
Systembetriebszeit:

Inhalt von tmp.txt:
Systembetriebszeit: 0 Tage, 5 Stunden, 18 Minuten, 48 Sekunden

wieso das? - Bin offenbar blind - Danke

4 Antworten

0 Punkte
Beantwortet von computerschrat Profi (32.2k Punkte)
Hallo HorstGoellnitz,

da scheint mittlerweile der Interpreter nicht mehr so zu funktionieren, wie zu DOS-Zeiten. Wenn du einen Delimiter definierst, dann funktioniert es. Dabei ist egal, welchen Delimiter du festlegst, das Leerzeichen wird auch immer genommen. Also ändere deine FOR-Schleife wie folgt:

FOR /F "delimiter=*" %%i in (tmp.txt) do (


Der Rest kann bleiben wie vorher und was du als Delimiter (hier das Sternchen) einträgst spielt keine Rolle, sofern der nicht in deiner Textzeile vorkommt.

Gruß
computerschrat
0 Punkte
Beantwortet von
Die Syntax

FOR /F "delimiter=*" ...

gibt es nicht.

Wenn, dann heißt das "delims=*" und ist aber eher unangebracht (wer weiß, ob nicht doch mal ein * vorkommt?).

So sollte es gehen:
FOR /F "tokens=*" %%i in (tmp.txt) do @echo %%i

"Tokens" sind die durch die Trennzeichen (Standard: Leerzeichen) getrennten Bestandteile, wobei 1, 2, 3, ... die Positionen wären und ein darauffolgender * (Stern) den Rest bzw. (falls allein angegeben) die gesamte Zeile enthält.

Zitat - for /?
tokens=x,y,m-n - Gibt an, welche Token von jeder Zeile an die
FOR-Schleife weitergegeben werden.
Das führt dazu, dass zusätzliche Variablen erstellt
werden. Mit der Form m-n wird dabei ein Bereich vom
m-ten bis zum n-ten Token angegeben. Wenn das letzte
Zeichen ein Sternchen ist, wird eine zusätzliche
Variable deklariert, die den verbleibenden Text
dieser Zeile enthält.

Gruß, MSDose
0 Punkte
Beantwortet von
Übrigens... Man braucht eigentlich keine Datei zum Zwischenspeichern dazu. Das geht auch "in einem Rutsch":
for /f "tokens=*" %%i in ('systeminfo ^| find "Systemstartzeit"') do @echo %%i

Entscheidend dabei ist der einschluß der Befehlssequenz in einfachen 'Hochkommata' und das Maskieren des Pipe-Symbols mit dem ^Zirkumflex.

Gruß, MSDose
0 Punkte
Beantwortet von
Korrektur:

In meinem Beispiel steht fälschlicherweise statt "Systembetriebszeit" der Suchbegriff "Systemstartzeit". Naja, ändert ja grundsätzlich nichts ;-)

Gruß, MSDose
...