Включить другой параметр / файл При выборе указать c Параметры - PullRequest
1 голос
/ 18 апреля 2020

Я сделал простой командный файл для запуска исполняемого файла с помощью некоторых параметров, которые предоставляются при запуске.

Примерно так:

:A
Echo Option 1
Echo Option 2
Set /p set1=Choice :
if %set1%==1 set A=Set1_1
if %set1%==2 set A=Set1_2
goto Set_2

:B
Echo Option A
Echo Option B
Set /p set2=Choice :
if %set2%==A set B=Set2_A
if %set2%==B set B=Set2_B
goto launch

:launch
program.exe -%A% -%B%

Так что в принципе это работает. Но мне нужно иметь способ включить другой параметр запуска для моей программы, если выбраны «Вариант 1» и «Вариант А». Не в «Варианте 2» и «Варианте B».

, чтобы мой запуск выглядел следующим образом

program.exe -%set1% -%set2% -%if1_A%

Редактировать: я допустил некоторые ошибки здесь, в этой командной строке но я не буду исправлять это, поскольку @avery_larry указал на это.

Извините, если я запутал это, пожалуйста, дайте мне знать, если нужно уточнить или уточнить дальше. :)

Ответы [ 3 ]

1 голос
/ 18 апреля 2020

не проверено

Если для переменной не задано ничего, она будет расширена до нуля. Установите третью переменную и убедитесь, что она не установлена, если условия не выполняются. Примерно так:

set if1_a=
if "%set1%"=="1" (
   if "%set2%"=="A" (
      set "if1_a=-option"
   )
)

program.exe -%set1% -%set2% %if1_A%

Обратите внимание, что я сделал дефис частью переменной. Также, вероятно, это должно быть:

program.exe -%A% -%B% %if1_A%

и, наконец, вы, вероятно, захотите использовать if /i, чтобы сделать его нечувствительным к регистру.

0 голосов
/ 18 апреля 2020

В то время как ваш вопрос, возможно, использовал параметры ввода только для целей вопроса, , а не в реальном мире ; поскольку они являются известными вариантами, я решил предложить решение, которое использует более надежную встроенную команду choice.exe:

@Rem Undefine any existing variables to be used.
@For /F "Delims==" %%G In ('Set Opt[ 2^>NUL')Do @Set "%%G="

@Rem Request first argument.
@"%__APPDIR__%choice.exe" /C 12 /M "First argument"

@Rem Define the first argument with the value chosen.
@Set "Opt[1]=%ERRORLEVEL%"

@Rem Request second argument.
@"%__APPDIR__%choice.exe" /C AB /M "Second argument"

@Rem Define the second argument with the value chosen.
@If ErrorLevel 2 (Set "Opt[2]=B")Else (Set "Opt[2]=A"
    Rem Define third argument if first chosen was 1
    If %Opt[1]% Equ 1 Set "Opt[3]=-"Third option string"")

@Rem Launch program with required options.
@Echo program.exe -"%Opt[1]%" -"%Opt[2]%" %Opt[3]%

@Rem Prevent cmd window from possibly closing early.
@Pause
0 голосов
/ 18 апреля 2020

Проблем с пользовательским вводом можно избежать с помощью функции проверки ввода, как показано здесь:

@Echo off & CD "%~dp0"
TITLE %~n0 & Setlocal

::: / Creates variable /AE = Ascii-27 escape code.
::: - http://www.dostips.com/forum/viewtopic.php?t=1733
::: - https://stackoverflow.com/a/34923514/12343998
:::
::: - /AE can be used  with and without DelayedExpansion.
    Setlocal
    For /F "tokens=2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
        Endlocal
        Set "/AE=%%a"
    )
::: \

%= Remark =%

    (Set LF=^


%= NewLine variable to split set /p input line =%)

%= create blank batch file to store and retrieve variables in for automatic reload =%

    If not Exist "inputlog.bat" (Echo(@Echo Off>inputlog.bat & Goto :main)
    For %%A in ( "%/AE%[36m[%/AE%[34mN%/AE%[36m]ew" , "[%/AE%[34mL%/AE%[36m]oad%/AE%[0m" )Do Echo.%%~A
    Choice /N /C nl >nul
    If errorlevel 2 (Goto :load)    
    Goto :Main

:Input <VarName> <Optional - define valid values with each additional parameter>
    Set "variable=%~1"
    Setlocal EnableDelayedExpansion
    IF not "%~2"=="" For %%A in (%*) Do (If not "%%~A"=="%1" (Set "valid=%%~A !valid!"))

:Confirm
%= allow input of variable, test input, store for reloading. =%

    Echo(%/AE%[35m
    Set /P "input=!variable!!LF!%/AE%[36m{> %/AE%[33m"
    IF "!input!"=="" (
        Echo(%/AE%[31m!variable! required.
        Goto :Confirm
    )
    IF "%~2"=="" (
        ECHO(Set "!variable!=!input!">>inputlog.bat
        Endlocal & Set "%variable%=%input%"
        Exit /B
    )

    For %%A in (!valid!) Do (
        If /I "!input!"=="%%~A" (
                ECHO(Set "!variable!=!input!">>inputlog.bat
                Endlocal & Set "%variable%=%input%"
                Exit /B
        )
    )
    Echo(%/AE%[31m!variable! required.
    Echo(%/AE%[36mSelect from:
    For %%A in (!valid!) Do (Echo(%/AE%[33m%%~A%/AE%[0m)
    Goto :Confirm

:main
%= define variable (parameter 1) and restrict definition of variables to specified values (additional parameters) =%
    Call :Input language english spanish

%= Define multiple variables at once =%
    For %%A in ("name" "age" "location" "job" "hobbies") Do (Call :Input %%A)

%= undefine local variables =%
    endlocal
%= Display that variable definitions have been removed =%
    For %%A in ("language" "name" "age" "location" "job" "hobbies") Do Set %%A

:load
%= Reload the variables from the input Log and display. =%
    Call inputlog.bat
%= Demonstrate that variables have been reloaded =%
    Setlocal EnableDelayedExpansion
    For %%A in ("language" "name" "age" "location" "job" "hobbies") Do (Echo(%/AE%[37m%%~A:!LF!%/AE%[36m%/AE%[33m!%%~A!%/AE%[32m%/AE%[0m)
    pause
...