Параметры Cli и подсказка

#batch-file

Вопрос:

Моему пакетному сценарию нужны определенные значения. Я хочу поддерживать как подсказки, так и параметры. Не знаю, почему первое if username not defined всегда не проверяется, либо я прохожу -u <username> , либо нет.

 @echo off

setlocal enableextensions disabledelayedexpansion

:parse
IF "%~1"=="" GOTO endparse
IF "%~1"=="-u" SET ouser=%~2
IF "%~1"=="-s" SET studies=%~2
IF "%~1"=="-h" REM do something else
SHIFT
GOTO parse
:endparse

if not defined ouser (
rem set the username using a plain prompt
    SET /p ouser=Enter your Username [ENTER]:
    if not defined ouser (
        echo Username must be defined
        goto :eof
    )
)

rem set the study using a plain prompt
    SET /p studies=Enter the comma-separated list [ENTER]:
    if not defined studies (
        echo At least one item must be defined
        goto :eof
    )


echo %ouser% - %studies%

endlocal
exit /b
 

потребительская сторона

 > script.bat // in this case I would expect the prompt for both "ouser" and "studies"

> script.bat -u myuser // in this case I want to prompt just for the param "studies" (the same if I pass just "studies" as param)

> script.bat -u myuser -s study1,study2 // no prompt
 

Комментарии:

1. %USERNAME% уже является системной переменной. Выберите другое имя переменной.

2. Просто для расширения, %username% является переменной по умолчанию в современной системе Windows, поэтому if not defined username блок никогда не будет выполнен.

3. он будет выполняться в случае -u , если передается как arg 1 без дополнительных параметров

4. Хорошо исправлено @T3RR0R. Кроме того, поскольку неясно, что это все содержимое скрипта, если username оно уже не определено, никакие аргументы, переданные при :parse достижении, также не могут этого сделать!

5. В вашем недавно отредактированном коде if not defined %studies ( должно быть If Not Defined studies ( . Кстати, нам также помогло бы, если бы вы предоставили пример того, как именно вы запускаете этот пакетный файл, и по крайней мере один из них, показывающий переданные аргументы, которые не работают для вас. Это также помогло бы, если бы вы протестировали его, Echo On чтобы вы могли видеть каждую строку ввода и вывода во время ее выполнения.