在批处理文件中的FOR循环中连接字符串

在批处理文件中的FOR循环中连接字符串

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%

相关内容