Bat를 사용하여 exe를 실행한 후 배치 파일이 올바른 값을 반환하지 않습니다.

Bat를 사용하여 exe를 실행한 후 배치 파일이 올바른 값을 반환하지 않습니다.

이 스크립트에는 많은 문제가 있습니다. 사용자가 지정한 파일을 읽은 다음 storeresult환경 변수에 저장해야 합니다.

배치 명령에 영향을 미치지 않는 BAT To EXE 변환기를 사용하고 있으므로 그렇지 않습니다. (내가 왜 storvar대신 전화하는지 궁금하다면 storvar.bat)

기본 스크립트( storvar.exe):

set a=%~1
set b=%~2
set c=%~3
for /f "delims=" %%a in (stor\%a%.stor) do set storeresult=%%a
pause

스크립트를 호출하는 데 사용하는 스크립트(호출 시 오류 없음):

storevar Hi hi
pause
echo %storeresult%
pause

호출하면 결과( %storeresult%)가 아무것도 반환되지 않고 문제를 찾을 수 없습니다!

답변1

변수를 정의하고 사용하려고 할 때 항상 주의해야 합니다.범위.

명령을 사용하여 정의하는 환경 변수는 set정의된 프로세스 범위 내에서만 유효합니다. 실험을 통해 증명하는 것은 쉽습니다:

  1. 하나의 명령 프롬프트를 열고 set a = b. set올바르게 정의되었는지 확인하는 데 사용됩니다 .
  2. 이제 두 번째 명령 프롬프트를 열고 set. a이 범위에는 정의되어 있지 않습니다 .

storvar.exe별도의 프로세스입니다. 따라서 자체 범위가 있습니다. 정의한 환경 변수는 그대로 유지되며 종료 시 삭제됩니다.

그렇다면 대안이 있나요?그렇죠. 저는 더 이상 사용되지 않는 배치 파일 대신 PowerShell을 사용합니다. 파일에서 내용을 추출하여 바로 사용하거나 다음 스크립트로 내보낼 수 있습니다. (Microsoft는 공식적으로 PowerShell을 EXE로 컴파일하는 것을 지원하지만 TechNet 갤러리에서도 초보자용 컴파일을 찾을 수 있습니다.) AutoIt은 또 다른 대안입니다.

관련 정보