【问题标题】:VBScript and Batch interactionVBScript 和批处理交互
【发布时间】:2012-08-03 11:21:16
【问题描述】:

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

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

但是,它不工作......有什么帮助让这个真正工作?

【问题讨论】:

    标签: vbscript batch-file


    【解决方案1】:

    您的主要问题是您没有正确设置文件以方便从批处理文件中提取 VBS。您的 VBS 看起来与批次标签没有什么不同。您过滤掉了“标签”标签,但您仍然包含:ini:BATCH 等行。显然,这些行会导致 VBS 出错。我通过在您的 VBS 前面加上 ::: 并调整您的过滤器解决了这个问题。无需显式过滤掉任何标签。我选择了 3 个冒号,因为一个冒号用于标签,而 2 个冒号经常用于 cmets。只需改变前面冒号的数量,您就可以在批处理中嵌入多个独立的 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
    

    【讨论】:

    • 好的。我现在无法测试你的代码,但我一回家就会测试它。顺便说一句,你能检查一下我的其他类似但更酷的链接吗? stackoverflow.com/questions/11795483/…
    • 您好,我测试过,输入框没有出现。如果您选择 [1],它会回显“无效密码”...“做其他事情”。不工作。顺便说一句,您检查过我上面的其他链接吗?谢谢
    • @user1573858 - ???我不知道你哪里错了。该代码非常适合我。我在第一个提示符处输入 1,它给了我 VBS 输入框,它会在其中询问我的密码。我输入“okay”,然后它进入 PLAN-A,其他任何东西都进入 PLAN-B。
    猜你喜欢
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 2020-02-12
    • 2015-05-12
    • 2012-10-13
    • 1970-01-01
    相关资源
    最近更新 更多