1

У меня есть файл sfsview_monitor1.txt со следующим содержанием:

Total pages: 16320
Pages used: 142
Pages free: 16178

Я хочу вывод, как это:

16320 142 16178

с помощью следующего кода я не могу это сделать:

@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%

кто-то может указать мне правильное направление?

3 ответа3

4

ИМО, это не обязательно должно быть настолько сложным, как об этом говорит другой ответ.

Если это единственные строки в текстовом файле, вы можете использовать следующее:

@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

Если строки присутствуют в произвольных местах в текстовом файле, вы можете использовать следующее:

@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

Вам даже не нужна первая версия, так как вторая является более общей.


Если вы даже не заботитесь о сохранении значений в переменной и просто заинтересованы в выводе, следующие строки также будут работать:

@for /f "tokens=2 delims=:" %%a in (sfsview_monitor1.txt) do @echo | set /p var=%%a 

а также

@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 

Важно: в обеих этих однострочных версиях в конце строки есть пробел, который требуется! Кроме того, как отмечено выше, вы можете просто игнорировать первую версию и использовать вторую, поскольку последняя является более общей из двух.

0

Значение %myvar% внутри цикла for всегда будет значением, которое было до начала цикла. Если вы хотите использовать измененную переменную, используйте !myvar! вместо.

@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%

Это будет выводить

16320 142 16178

Часть %myvar:~1% там просто удаляет пространство, которое ваш цикл for помещает в начале первого числа.

0

Попробуй это:

@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%

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .