배치 파일의 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

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

텍스트 파일의 임의 위치에 줄이 있으면 다음을 사용할 수 있습니다.

@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%

관련 정보