2

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

这时,一个用vbscript制作的窗口会提示要求用户输入登录名和密码。(确定,取消按钮)

如果 OK 后凭据正确,则批次将根据计划 A 继续执行,否则批次将执行其他操作以执行计划 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 

: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 输入“通过”发送到批处理,批处理回显“从这里继续”或“做其他事情”,其余代码应从同一批处理中继续。

但是,它不起作用......有什么帮助让它真正起作用吗?

4

1 回答 1

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
于 2012-08-03T12:05:45.753 回答