
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
2 番目のバージョンの方が汎用性が高いため、実際には最初のバージョンは必要ありません。
変数に値を格納する必要がなく、出力だけに興味がある場合は、次のワンライナーでも十分です。
@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
重要:これら 1 行バージョンの両方で、行末にスペースが必要です。また、上記のように、2 つ目のバージョンの方がより汎用的であるため、最初のバージョンを無視して 2 つ目のバージョンを使用することもできます。
答え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%