Verketten von Zeichenfolgen in einer FOR-Schleife in einer Batchdatei

Verketten von Zeichenfolgen in einer FOR-Schleife in einer Batchdatei

Ich habe eine Datei sfsview_monitor1.txtmit 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 forSchleife 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%

verwandte Informationen