2013-02-01 2 views
1

플랫폼 Windows XP출력 캡처 명령 CMD

명령 파일 (.bat)을 작성할 때 명령에서 출력을 변수로 "catch"할 수 있습니까? 나는 그렙, Cygwin에서 또는 다른 소프트웨어 에디터를 이용해 수 없습니다

나는이

SET CR='dir /tw /-c b.bat | findstr /B "[0-9]"' 

같은 것을하고 싶어하지만이

감사 스테판

PS 없음을 작동하지 않습니다 CMD 여야합니다. DS

답변

1

당신은 출력을 캡처하는 FOR /F를 사용하여 배치 파일 내부의 루프를 통해 갈 수 있습니다

@echo off 
setlocal enabledelayedexpansion 
set var= 
for /f "tokens=* delims=" %%i in ('dir /tw /-c b.bat ^| findstr /B "[0-9]"') do set var=!var!^ 

%%i 

echo %var% 

!var!^ 아래 %%i 사이에 두 줄 바꿈이 있다는 것을 특히 중요하다.

또한 FOR의 명령 줄에서이 인스턴스의 파이프와 같은 특수한 의미를 갖는 모든 문자를 이스케이프해야합니다 (다시 ^ 사용).

솔루션은 명령의 출력을 반복하고 각 행을 점진적으로 var의 내용에 추가하여 작동합니다. 다소 편리한 방식으로이를 수행하기 위해 스크립트는 지연 변수 확장 (!var! 구문)을 가능하게합니다.

0

for /f 그 :

for /f %%L in ('dir /tw /-c b.bat ^| findstr /b "[0-9]"') do set CR=%%L 

이것은 한 줄의 출력 만 있다고 가정합니다. 한 변수에서 두 줄 이상을 캡처 할 수는 없습니다.

당신이 뭘 하려는지 이 실제로는 인 것으로 추측 할 수 있습니다. 당신은 (단지 때문에 /-c의 추측) 파일 크기를 필요로 그것은

for %%X in (b.bat) do set size=%%~zX 
0

Youc에게 세트 당신에게 종료 errorlevel를 사용하는 것이 확실히 쉽게, 당신이 당신의 배치 파일에서 명령의 ExitCode를 요청할 수있는 경우 . 이게 당신이 의미하는 바가 확실하지 않지만 도움이되기를 바랍니다.