MS 배치 파일을 사용하여 프로그램 출력을 변수에 할당해야합니다.
GNU Bash 셸에서 사용할 것 VAR=$(application arg0 arg1)
입니다. 배치 파일을 사용하는 Windows에서도 비슷한 동작이 필요합니다.
같은 것 set VAR=application arg0 arg1
.
답변
한 가지 방법은 다음과 같습니다.
application arg0 arg1 > temp.txt
set /p VAR=<temp.txt
다른 것은 :
for /f %%i in ('application arg0 arg1') do set VAR=%%i
첫 번째주의 %
에서이 %%i
을 탈출하는 데 사용됩니다 %
뒤에 배치 파일에서가 아닌 명령 줄에서 위의 코드를 사용할 때 필요하다. 당신 test.bat
이 다음과 같은 것을 상상해보십시오 .
for /f %%i in ('c:\cygwin64\bin\date.exe +"%%Y%%m%%d%%H%%M%%S"') do set datetime=%%i
echo %datetime%
답변
이 이전 답변 외에도 파이프는 캐럿 기호로 이스케이프 된 for 문 내부에서 사용할 수 있습니다.
for /f "tokens=*" %%i in ('tasklist ^| grep "explorer"') do set VAR=%%i
답변
답변
응용 프로그램의 출력이 숫자 리턴 코드라고 가정하면 다음을 수행 할 수 있습니다.
application arg0 arg1
set VAR=%errorlevel%
답변
실행 중 : for /f %%i in ('application arg0 arg1') do set VAR=%%i
오류가 발생했습니다. 현재 %% i이 (가) 예기치 않았습니다. 수정으로, 나는 위와 같이 실행해야했다.for /f %i in ('application arg0 arg1') do set VAR=%i
답변
답변 외에도 루프 의 설정 부분 에서 출력 리디렉션 연산자를 직접 사용할 수 없습니다 for
(예 : 사용자의 stderror 출력을 숨기고 더 나은 오류 메시지를 제공하려는 경우). 대신 캐럿 문자 ( ^
) 로 이스케이프해야합니다 .
for /f %%O in ('some-erroring-command 2^> nul') do (echo %%O)
답변
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
REM Prefer backtick usage for command output reading:
REM ENABLEDELAYEDEXPANSION is required for actualized
REM outer variables within for's scope;
REM within for's scope, access to modified
REM outer variable is done via !...! syntax.
SET CHP=C:\Windows\System32\chcp.com
FOR /F "usebackq tokens=1,2,3" %%i IN (`%CHP%`) DO (
IF "%%i" == "Aktive" IF "%%j" == "Codepage:" (
SET SELCP=%%k
SET SELCP=!SELCP:~0,-1!
)
)
echo actual codepage [%SELCP%]
ENDLOCAL