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

sha*_*haf 2 windows command-line

我有一个sfsview_monitor1.txt包含以下内容的文件:

Total pages: 16320
Pages used: 142
Pages free: 16178
Run Code Online (Sandbox Code Playgroud)

我想要这样的输出:

16320 142 16178
Run Code Online (Sandbox Code Playgroud)

使用以下代码我无法做到:

@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%
Run Code Online (Sandbox Code Playgroud)

有人可以指出我正确的方向吗?

Kar*_*ran 5

IMO 这不一定要像其他答案所说的那样复杂。

如果这些是文本文件中唯一的行,那么您可以使用以下内容:

@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
Run Code Online (Sandbox Code Playgroud)

如果这些行出现在文本文件中的随机位置,那么您可以使用以下内容:

@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
Run Code Online (Sandbox Code Playgroud)

您实际上甚至不需要第一个版本,因为第二个版本更通用。


如果您甚至不关心将值存储在变量中,而只是对输出感兴趣,那么以下一个衬垫也可以:

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

@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 
Run Code Online (Sandbox Code Playgroud)

重要提示:在这两个单行版本中,行尾都有一个空格是必需的!此外,如上所述,您可以简单地忽略第一个版本并使用第二个版本,因为后者是两者中更通用的。