2

バッチ スクリプトを実行していますが、ユーザーがデータベースにアクセスする必要がある場所があります。

この時点で、vbscript で作成されたウィンドウが、ユーザーにログインとパスワードの入力を求めるプロンプトを表示します。(OK、キャンセルボタン)

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入力の「パス」をバッチに送信し、バッチは「ここから続行」または「何か他のことを行う」とエコーし、そこからコードの残りの部分を同じバッチで続行する必要があります。

しかし、それは機能していません...これを本当に機能させるための助けはありますか?

4

1 に答える 1

4

あなたの主な問題は、バッチ ファイルからの VBS の抽出を容易にするためにファイルを適切に設定しなかったことです。VBS は、バッチ ラベルと同じように見えます。「ラベル」ラベルを除外しますが:ini:BATCH、 などの行を含めます。明らかに、それらは VBS をつまずかせます。:::VBS にプレフィックスを付けてフィルターを調整することで問題を解決しました。ラベルを明示的に除外する必要はありません。ラベルには 1 つのコロンが使用され、コメントには 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
于 2012-08-03T12:05:45.753 に答える