VBScript和批处理交互

时间:2012-08-03 11:21:17

标签: vbscript batch-file

我正在运行批处理脚本,用户必须访问某个数据库。

此时,用vbscript创建的窗口会提示用户输入登录名和密码。 (确定,取消按钮)

如果凭证在OK之后是正确的,则批次将根据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输入“传递”发送到批处理,批处理回显“从此处继续”或“执行其他操作”,其余代码应在同一批处理中继续。

然而,它无法正常工作...任何有助于使真正工作的帮助?

1 个答案:

答案 0 :(得分:4)

您的主要问题是您没有正确设置文件以便于从批处理文件中提取VBS。您的VBS看起来与批处理标签没什么区别。您过滤掉了“标签”标签,但仍然包含:ini:BATCH等行。显然,这些行将绊倒VBS。我通过在VBS前加:::前缀并调整过滤器来解决问题。无需明确过滤掉任何标签。我选择了3个冒号,因为单个冒号用于标签,2个冒号经常用于评论。您可以通过改变前面冒号的数量,在批处理中嵌入多个独立的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