#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
чтобы вы могли видеть каждую строку ввода и вывода во время ее выполнения.