我正在运行批处理脚本,用户必须访问某个数据库。
此时,用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输入“传递”发送到批处理,批处理回显“从此处继续”或“执行其他操作”,其余代码应在同一批处理中继续。
然而,它无法正常工作...任何有助于使真正工作的帮助?
答案 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