문제

Batch 파일 양식이라는 비 모달 경고 상자를 갖고 싶습니다. 현재 VBScript를 사용하여 모달 알림 상자를 만듭니다.

>usermessage.vbs ECHO WScript.Echo^( "Generating report - this may take a moment." ^)
WSCRIPT.EXE usermessage.vbs

그러나 사용자 상호 작용을 기다리지 않고 스크립트 (보고서 생성)를 진행하고 싶습니다. 이것을 어떻게 달성 할 수 있습니까? vbscript인지 아닌지는 상관하지 않습니다 - 나는 단지 내 배치 스크립트 (Windows XP)에서 작동하기를 원합니다.

도움이 되었습니까?

해결책

현재 트릭에 대한 새로운 요구 사항이없는 간단한 답변은 start 명령 배치 파일 실행에서 스크립트를 분리하려면

그것은 다음과 같은 것처럼 보일 수 있습니다.

>usermessage.vbs ECHO WScript.Echo^( "Generating report - this may take a moment." ^)
start WSCRIPT.EXE usermessage.vbs
echo This text is a proxy for the hard work of writing the report

유일한 차이점이 사용되는 곳 start 실행하려면 wscript. 이것은 현재 디렉토리에 임시 파일을 놓고 상자를 수동으로 해산해야한다는 결함으로 어려움을 겪습니다.

두 문제 모두 처리하기 쉽습니다.

@echo off
setlocal 
set msg="%TMP%\tempmsg.vbs"
ECHO WScript.Echo^( "Generating report - this may take a moment." ^) >%msg% 
start WSCRIPT.EXE /I /T:15 %msg%
echo This text is a proxy for the hard work of writing the report
ping -n 5 127.0.0.1 >NULL
del %msg% >NUL 2>&1

여기서 나는 임시 스크립트를 %TMP% 폴더를 작성하고 완료되면 삭제해야합니다. 나는 an을 사용했다 echo 그리고 a ping 긴 프로세스가 실행되는 것을 보여주기 위해 시간을 낭비하도록 명령하십시오. 그리고 나는 그것을 사용했다 /I 그리고 /T 옵션 wscript 스크립트가 "대화식으로"실행되는지 확인하고 스크립트를 실행할 수 있도록 최대 시간을 설정합니다.

그만큼 @echo off 그리고 setlocal 명령 프롬프트에서 실행할 때 더 깨끗하게 보이게하고 프롬프트 환경에서`% msg%라는 이름을 남기지 못하게하십시오.

편집하다: 요하네스 로스 셀의 비판 setlocal 주석에서 잘못되었습니다. 이것이 명령 프롬프트에서 호출되면 setlocal 변수 MSG는 프롬프트 및 해당 프롬프트에서 시작된 다른 배치 파일 및 프로그램으로 보입니다. 사용하는 것이 좋습니다 setlocal 실제로 던지기 스크립트 이상의 것을 작성하는 경우 배치 파일에서 로컬 변수를 분리합니다.

이것은 쉽게 입증 될 수 있습니다.

C:> type seta.bat 
@set A=SomeValue

C:> set A
ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\Ross\Application Data

C:> seta.bat

C:> set A
A=SomeValue
ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\Ross\Application Data

C:>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top