
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%