
이 스크립트에는 많은 문제가 있습니다. 사용자가 지정한 파일을 읽은 다음 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
정의된 프로세스 범위 내에서만 유효합니다. 실험을 통해 증명하는 것은 쉽습니다:
- 하나의 명령 프롬프트를 열고
set a = b
.set
올바르게 정의되었는지 확인하는 데 사용됩니다 . - 이제 두 번째 명령 프롬프트를 열고
set
.a
이 범위에는 정의되어 있지 않습니다 .
storvar.exe
별도의 프로세스입니다. 따라서 자체 범위가 있습니다. 정의한 환경 변수는 그대로 유지되며 종료 시 삭제됩니다.
그렇다면 대안이 있나요?그렇죠. 저는 더 이상 사용되지 않는 배치 파일 대신 PowerShell을 사용합니다. 파일에서 내용을 추출하여 바로 사용하거나 다음 스크립트로 내보낼 수 있습니다. (Microsoft는 공식적으로 PowerShell을 EXE로 컴파일하는 것을 지원하지만 TechNet 갤러리에서도 초보자용 컴파일을 찾을 수 있습니다.) AutoIt은 또 다른 대안입니다.