
У меня есть файл 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%
может ли кто-нибудь указать мне правильное направление?
решение1
По моему мнению, это не обязательно должно быть так сложно, как представляется в другом ответе.
Если это единственные строки в текстовом файле, то вы можете использовать следующее:
@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
Важный:В обоих этих однострочных вариантах есть пробел в конце строки, который обязателен! Кроме того, как отмечено выше, вы можете просто игнорировать первый вариант и использовать второй, так как последний является более общим из двух.
решение2
Значение %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 помещает в начале первого числа.
решение3
Попробуй это:
@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%