Windows 배치 파일의 명령 결과로 변수 값 설정


99

Bash 환경 에서 작업 할 때 명령의 결과로 변수 값을 설정하려면 일반적으로 다음을 수행합니다.

var=$(command -args)

여기서는 var명령에 의해 설정된 변수입니다 command -args. 그런 다음 해당 변수에 $var.

거의 모든 Unix 쉘과 호환되는보다 일반적인 방법은 다음과 같습니다.

set var=`command -args`

즉, Windows 배치 파일 에서 명령의 결과로 변수 값을 어떻게 설정할 수 있습니까? 난 노력 했어:

set var=command -args

그러나 명령의 출력이 아닌 var로 설정되어 command -args있습니다.

답변:


63

Jesse가 설명하는 작업을 수행하려면 Windows 배치 파일에서 다음을 작성해야합니다.

for /f "delims=" %%a in ('ver') do @set foobar=%%a 

그러나 Unix 유형 스크립팅에 익숙하다면 Windows 시스템에서 Cygwin 을 사용하는 것이 좋습니다 .


19
사용 for /f "delims=" %a in ('ver') do @set foobar=%a명령 프롬프트에서. 사용 for /f "delims=" %%a in ('ver') do @set foobar=%%a스크립트 파일에
게오르그

가벼운 대안은 Gnu On Windows ( github.com/bmatzelle/gow/wiki )입니다. 명령 프롬프트를 열고 bash. 그런 다음 bash 명령을 작성할 수 있습니다. bash 스크립트를 실행할 수도 있습니다.
Nathan

4
명령에 파이프가 포함 된 경우 캐럿을 사용하여 이스케이프해야합니다. 예 : for / f "delims ="%% a in ( 'echo foobar ^ | sed -es / foo / fu /') do @ set foobar = %% a
yoyo

35

Windows 배치 명령은 다음과 같이 약간주의해야합니다.

for /f "delims=" %%a in ('command') do @set theValue=%%a

Unix 쉘 명령문과 동일한 의미가 없습니다.

theValue=`command`

명령이 실패하여 오류가 발생한 경우를 고려하십시오.

Unix 셸 버전에서 "theValue"에 대한 할당은 계속 발생하며 이전 값은 빈 값으로 대체됩니다.

Windows 배치 버전에서 오류를 처리하는 것은 "for"명령이며 "do"절에 도달하지 않으므로 "theValue"의 이전 값이 유지됩니다.

Windows 배치 스크립트에서 더 많은 Unix와 유사한 의미 체계를 얻으려면 할당이 발생하는지 확인해야합니다.

set theValue=
for /f "delims=" %%a in ('command') do @set theValue=%%a

Unix 스크립트를 Windows 배치로 변환 할 때 변수 값을 지우지 못하면 미묘한 오류가 발생할 수 있습니다.


2
Windows와 * nix의 미묘한 차이점을 설명해 주셔서 감사합니다.
Jeroen Wiert Pluimers 2013

3
또한 모든 특수 문자를 이스케이프해야합니다 command. 예 : for /f "delims=" %%a in ('command1 ^| command2') do set VAR=%%a.
Bill_Stewart

그냥 잠시, 내 하루 저장 @Bill_Stewart 나는 변수에 파이프 명령의 출력을 지정하기 더 힘들어라고 생각
MrBrody

19

배치 파일에 데이터베이스 쿼리 결과가 필요할 때 수행하는 방법은 다음과 같습니다.

sqlplus -S schema/schema@db @query.sql> __query.tmp
set /p result=<__query.tmp
del __query.tmp

키는 2 행에 있습니다. "set / p"는 "<"리디렉션 연산자를 통해 "__query.tmp"의 첫 번째 행 (전용) 값으로 "result"값을 설정합니다.


14

내가 본 유일한 방법은 다음과 같은 경우입니다.

for /f "delims=" %a in ('ver') do @set foobar=%a

ver Windows 및 내 시스템에 대한 버전 명령입니다.

Microsoft Windows [Version 6.0.6001]

출처


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.