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

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

var=$(command -args)

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

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

set var=`command -args`

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

set var=command -args

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



답변

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

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

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


답변

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 배치로 변환 할 때 변수 값을 지우지 못하면 미묘한 오류가 발생할 수 있습니다.


답변

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

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

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


답변

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

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

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

Microsoft Windows [Version 6.0.6001]

출처


답변

Set "dateTime="
For /F %%A In ('powershell get-date -format "{yyyyMMdd_HHmm}"') Do Set "dateTime=%%A"
echo %dateTime%
pause

여기에 이미지 설명 입력
for명령에 대한 공식 Microsoft 문서


답변