2012-08-03 1 views
1

일괄 처리 스크립트를 실행 중이며 사용자가 데이터베이스에 액세스해야하는 곳입니다.VBScript 및 일괄 처리 상호 작용

이 순간에 vbscript로 만든 창이 로그인 및 암호를 입력하라는 메시지를 표시합니다.

확인 후에 자격 증명이 맞으면 일괄 처리가 planA에 따라 계속되고 그렇지 않으면 일괄 처리가 planB로 진행됩니다. (취소)하면 일괄 처리 및 주 메뉴로 돌아갑니다.

내가 고민 다네 무엇인가 :

@echo off 

:Ini 
echo [1] Access database 
echo [2] Main menu 
echo: 
set /p Quest= What do you prefer (1/2)?   
if not '%Quest%'=='' set Quest=%Quest:~0,1% 
if '%Quest%'=='1' goto VBS 
if '%Quest%'=='2' goto BATCH 
echo Invalid option, please try again 
cls 
goto Ini 

:BATCH 
echo Heading for main menu ... 
goto Main 

:VBS 
:wscript.echo InputBox("Enter your password","VBScript-Batch") 
findstr "^:" "%~sf0" | findstr /i /v ":Label" >temp.vbs 
for /f "delims=" %%N in ('cscript //nologo temp.vbs') do set pass=%%N 
del temp.vbs 

:Label1 

If %pass%=="okay" echo Valid Password ! & goto PLAN-A 
If not %pass%=="okay" echo Invalid Password !! & goto PLAN-B 

:PLAN-A 
echo continue from here 

:PLAN-B 
echo do something else 

(...)

- 사용자 정보를 캡처를 확인하고 배치로 돌아갈 방법 planA 또는 planB에 대해 ??

"& goto PLAN"을 제거하면 스크립트가 작동합니다. VBS 입력 "pass"를 배치에 보내고 나머지 배치가 같은 배치에서 계속되어야하는 곳에서 배치는 "여기에서 계속"또는 "다른 작업을 수행"합니다.

그러나 작동하지 않습니다 ... 어떤 도움이 정말 작동합니까?

답변

3

일차적 인 문제는 배치 파일에서 VBS 추출을 용이하게하기 위해 파일을 올바르게 설정하지 않았기 때문입니다. 귀하의 VBS는 배치 라벨과 다를 바 없습니다. "레이블"레이블을 걸러 낼 수 있지만 여전히 :ini, :BATCH 등과 같은 줄이 포함됩니다. 분명히 그 레이블은 VBS를 벗어납니다. VBS 앞에 :::을 붙이고 필터를 적용하여 문제를 해결했습니다. 레이블을 명시 적으로 필터링 할 필요가 없습니다. 하나의 콜론이 레이블에 사용되고 2 개의 콜론이 주석으로 자주 사용되기 때문에 3 개의 콜론을 선택했습니다. 선행 콜론 수를 변경하여 일괄 처리 내에 여러 개의 독립된 VBS 스크립트를 포함시킬 수 있습니다.

또한 코드를 약간 재구성하고 일부 EXIT/B 문에 코드를 삽입하지 않도록 뿌렸다. 또한 당신의 : MAIN이 정의되지 않았으므로 GOTO를 주석 처리하고 EXIT/B로 대체했습니다.

@echo off 
:Ini 
echo [1] Access database 
echo [2] Main menu 
echo: 
set /p Quest= What do you prefer (1/2)? 
if not '%Quest%'=='' set Quest=%Quest:~0,1% 
if '%Quest%'=='1' goto VBS 
if '%Quest%'=='2' goto BATCH 
echo Invalid option, please try again 
cls 
goto Ini 

:BATCH 
echo Heading for main menu ... 
::goto Main 
exit /b 

:VBS 
:::wscript.echo InputBox("Enter your password","VBScript-Batch") 
findstr "^:::" "%~sf0" >temp.vbs 
for /f "delims=" %%N in ('cscript //nologo temp.vbs') do set pass=%%N 
del temp.vbs 
If "%pass%"=="okay" (
    echo Valid Password ! 
    goto PLAN-A 
) else (
    echo Invalid Password !! 
    goto PLAN-B 
) 

:PLAN-A 
echo continue from here 
exit /b 

:PLAN-B 
echo do something else 
exit /b 
+0

확인. 지금 코드를 테스트 할 수는 없지만 집에 도착하자 마자 테스트 할 것입니다. 그건 그렇고, 비슷한 다른 멋진 링크를 확인할 수 있습니까? http://stackoverflow.com/questions/11795483/batch-parsing-to-vbscript-tough-brains-out-there-please –

+0

안녕하세요, 테스트를 거쳤으며 입력란이 표시되지 않습니다. [1]을 선택하면 "잘못된 암호"... "다른 것을하십시오"와 같은 메시지가 나타납니다. 작동 안함. 그런데 위의 다른 링크를 확인 했습니까? 감사합니다 –

+0

@ user1573858 - ??? 네가 어디로 잘못 됐는지 나는 모른다. 이 코드는 완벽하게 작동합니다. 첫 번째 프롬프트에서 1을 입력하면 VBS 입력 상자에서 암호를 묻습니다. 나는 "okay"라고 입력하고 PLAN-A로 간다. 다른 것은 PLAN-B로 간다. – dbenham