VBScript перенаправляет пользователя на метку - PullRequest
1 голос
/ 16 марта 2019

Я недавно начал кодировать в VBScript, и у меня есть работа, где у меня есть пакетный файл с именем Game.bat, расположенный в папке C:\Velocity DK\My Game.

В моей игре пользователь получает доступ к приложению. Базовый скрипт работает просто отлично, но здесь есть проблема. У меня есть файл .vbs, который открывается, когда пользователь вводит неверную информацию в командный файл. Однако я не могу найти способ перенаправить файл VBS на метку, которую я хочу, чтобы пользователь использовал, в зависимости от того, какую кнопку пользователь нажал.

Пакетный файл выглядит примерно так:

@echo off
:RETRY
:MAIN
cls
echo Please input valid information.
echo.
set /p username=Username: 
set /p password=Password: 
if exist %USERPROFILE%\Game\"%username%"\username.sav if exist %USERPROFILE%\Game\"%username%"\username.sav goto game
if not exist %USERPROFILE%\Game\"%username%"\username.sav if not exist %USERPROFILE%\Game\"%username%"\username.sav (
    cls
    start /wait "" C:\"Velocity DK"\"My Game"\Invalid.vbs
)
goto MAIN

:: My Game's code is located here

:FORCE_QUIT
cls
exit /force
goto FORCE_QUIT

Мой VBS-файл выглядит так:

returnvalue = MsgBox "Do. you want to retry?",4,"My Game"
if returnvalue = 7 then
    ' Some code to redirect to batch file label :FORCE_EXIT
    WScript.Quit
else
    ' Some code to redirect to the batch file label :RETRY
end if

Вкратце, я хотел бы знать, как я мог бы сделать так, чтобы, когда пользователь нажимает кнопку «да», его снова перенаправляют на метку :RETRY в командном файле, он перенаправляется на :FORCE_QUIT метка. Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

Выбор

Я бы справился с этим с помощью команды CHOICE:

CHOICE /M "Do. you want to retry?"
IF %ERRORLEVEL% EQU 1 GOTO RETRY
IF %ERRORLEVEL% EQU 2 GOTO FORCE_QUIT

Таким образом, VBS вообще не нужен.

Errorlevel

Однако, если ваша VBS будет иметь код, который трудно или невозможно сделать в командном файле, ваш .vbs файл может вернуть код ошибки. Команда START /WAIT передаст этот код в переменную окружения %ERRORLEVEL%:

returnvalue = MsgBox("Do. you want to retry?",4,"My Game")
if returnvalue = 7 then
    WScript.Quit 2
else
    WScript.Quit 1
end if

Затем используйте следующее в вашем командном файле:

START /WAIT "" "C:\Velocity DK\My Game\Invalid.vbs"
IF %ERRORLEVEL% EQU 1 GOTO RETRY
IF %ERRORLEVEL% EQU 2 GOTO FORCE_QUIT

Дальнейшее чтение

0 голосов
/ 17 марта 2019

Можете ли вы использовать аргумент / , параметр , чтобы вызвать file.bat из вашего file.vbs , чтобы сделать это ?. ..

Как правило, в некоторых выпусках файл VBS и BAT обрабатывает аргумент / параметр и ведет себя из этих значений.

Код bat выше, напишет для вас файл vbs и выполнит vbs.

Звоните с vbs: file.bat :label

@echo off 
for %%a in (%*) do if /i "%1" equ "%%a" goto %%a

>"%temp%\Q_SO55201139.vbs"^
    (
     echo/ Option Explicit
     echo/ Dim WshShell,StrArg0, StrArg1, StrArg2, Result
     echo/ Set WshShell = Wscript.CreateObject^("Wscript.Shell"^)
     echo/ StrArg0 = Chr^(34^) ^& "%~f0" ^& Chr^(34^)
     echo/ StrArg1 = Chr^(34^) ^& ":RETRY" ^& Chr^(34^)
     echo/ StrArg2 = Chr^(34^) ^& ":FORCE_QUIT" ^& Chr^(34^)
     echo/ Result = MsgBox^("Do you want to retry?",vbyesno,"My Game"^)
     echo/ if  Result = VbNo then
     echo/     WshShell.Run ^(StrArg0 ^& StrArg2^),1,True
     echo/ else
     echo/     WshShell.Run ^(StrArg0 ^& StrArg1^),1,True
     echo/ end if
    )

:RETRY

:MAIN

cls
echo Please input valid information.
echo.

set /p "username=Username: "
set /p "password=Password: "

if exist "%USERPROFILE%\Game\"%username%"\username.sav" if exist "%USERPROFILE%\Game\"%username%"\username.sav" goto :game
if not exist "%USERPROFILE%\Game\"%username%"\username.sav" if not exist "%USERPROFILE%\Game\"%username%"\username.sav" (

    cls & start "" /w "%Windir%\System32\wScript.exe" //nologo "C:\Velocity DK\My Game\Invalid.vbs"

    )

start "" /w "%Windir%\System32\wScript.exe" //nologo "%temp%\Q_SO55201139.vbs" && exit /b

goto MAIN

:: My Game's code is located here

:FORCE_QUIT
cls & exit /force

goto :FORCE_QUIT

del /q /f "%temp%\Q_SO55201139.vbs" 2>nul >nul

Vbs file code

Option Explicit
Dim WshShell,StrArg0, StrArg1, StrArg2, Result
Set WshShell = Wscript.CreateObject("Wscript.Shell")
StrArg0 = Chr(34) & "game_cmd_vbs.cmd" & Chr(34)
StrArg1 = Chr(34) & ":RETRY" & Chr(34)
StrArg2 = Chr(34) & ":FORCE_QUIT" & Chr(34)
Result = MsgBox("Do you want to retry?",vbyesno,"My Game")
if  Result = VbNo then
    WshShell.Run (StrArg0 & StrArg2),1,True
else
    WshShell.Run (StrArg0 & StrArg1),1,True
end if

Obs.: Вам необходимо добавить полный путь в строке 5: c:\full\path\to\file\game_bat_vbs.cmd

Извините, мой ограничен Английский!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...