
Ich habe eine Datei sfsview_monitor1.txt
mit folgendem Inhalt:
Total pages: 16320
Pages used: 142
Pages free: 16178
Ich möchte die Ausgabe folgendermaßen:
16320 142 16178
mit folgendem Code gelingt mir das nicht:
@echo on
SETLOCAL EnableDelayedExpansion
SET myvar=
for /f "tokens=1-3" %%P in ('type c:\shafique\sfsview_monitor1.txt ^| FINDSTR /B /I "Total Pages"') do (
SET myvar=%myvar% %%R
)
echo %myvar%
kann mir jemand den richtigen Weg weisen?
Antwort1
Meiner Meinung nach muss das nicht unbedingt so kompliziert sein, wie es in der anderen Antwort dargestellt wird.
Wenn dies die einzigen Zeilen in der Textdatei sind, können Sie Folgendes verwenden:
@echo off
set var=
setlocal enabledelayedexpansion
for /f "tokens=2 delims=:" %%a in (sfsview_monitor1.txt) do set var=!var!%%a
set var=!var:~1!
echo !var!
endlocal
Wenn die Zeilen an zufälligen Stellen in der Textdatei vorhanden sind, können Sie Folgendes verwenden:
@echo off
set var=
setlocal enabledelayedexpansion
for /f "tokens=2 delims=:" %%a in ('findstr /c:"Total pages" /c:"Pages used" /c:"Pages free" sfsview_monitor1.txt') do set var=!var!%%a
set var=!var:~1!
echo !var!
endlocal
Eigentlich brauchen Sie die erste Version nicht einmal, da die zweite allgemeiner ist.
Wenn es Ihnen egal ist, ob die Werte in einer Variablen gespeichert werden, und Sie lediglich an der Ausgabe interessiert sind, reichen die folgenden Einzeiler genauso gut aus:
@for /f "tokens=2 delims=:" %%a in (sfsview_monitor1.txt) do @echo | set /p var=%%a
Und
@for /f "tokens=2 delims=:" %%a in ('findstr /c:"Total pages" /c:"Pages used" /c:"Pages free" sfsview_monitor1.txt') do @echo | set /p var=%%a
Wichtig:In beiden dieser einzeiligen Versionen ist am Ende der Zeile ein Leerzeichen erforderlich! Wie oben erwähnt, können Sie die erste Version auch einfach ignorieren und die zweite verwenden, da letztere die allgemeinere der beiden ist.
Antwort2
Der Wert von %myvar%
innerhalb der for
Schleife ist immer der Wert, den er vor Beginn der Schleife hatte. Wenn Sie die geänderte Variable verwenden möchten, verwenden Sie !myvar!
stattdessen.
@echo on
SETLOCAL EnableDelayedExpansion
SET myvar=
for /f "tokens=1-3" %%P in ('type c:\shafique\sfsview_monitor1.txt ^| FINDSTR /B /I "Total Pages"') do (
SET myvar=!myvar! %%R
)
echo %myvar:~1%
Dies gibt
16320 142 16178
Der %myvar:~1%
dortige Teil entfernt einfach das Leerzeichen, das Ihre For-Schleife am Anfang der ersten Zahl platziert.
Antwort3
Versuche dies:
@echo off &setlocal
set "tf=%temp%%random%"
set "pt=Total pages"
set "pu=Pages used"
set "pf=Pages free"
(echo(%pt%&echo(%pu%&echo(%pf%)>"%tf%"
for /f "tokens=1,2delims=:" %%i in ('^<"sfsview_monitor1.txt" findstr /g:"%tf%"') do (
if "%%i"=="%pt%" for /f %%a in ("%%j") do set "npt=%%a"
if "%%i"=="%pu%" for /f %%a in ("%%j") do set "npu=%%a"
if "%%i"=="%pf%" for /f %%a in ("%%j") do set "npf=%%a"
)
del "%tf%"
SET "myvar=%npt% %npu% %npf%"
echo(%myvar%