Командный файл не работает для данного ввода

#windows #batch-file #command-prompt

#Windows #пакетный файл #командная строка

Вопрос:

Ниже приведен созданный мной пакетный файл, для любого ввода отображается только строка «ВВОД НЕ ПРЕДОСТАВЛЕН», я попытался выполнить поиск в Google и перепробовал много вещей, но не решил мою проблему.

 @echo off
ECHO Please provide input... Valid input is :: Y/y (For changing path) or N/n (For not changing the path).

SETLOCAL
SET /p change=

if  "%~1" equ "" GOTO ERROREND

if /I "%change%" equ "Y" GOTO YES

if /I "%change%" equ "N" GOTO NO

:YES
    ECHO Y SELECTED.
    GOTO SUCCESS

:NO
    ECHO N SELECTED.
    GOTO SUCCESS
:ERROREND
    ECHO Input not recognized.
    GOTO FAILURE

:SUCCESS 
    ECHO Task completed succcess fully.
    pause

:FAILURE
    ECHO NO INPUT PROVIDED.
    pause
  

Требуется помощь. Спасибо, что прочитали этот вопрос.

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

1. И причина в "%~1" том, что … ?

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

3. SET /p change= -> Ввод переходит в change переменную, а не в первый аргумент командного файла.

Ответ №1:

 if  "%~1" equ "" GOTO ERROREND
  

означает «если первый параметр пакетного файла пуст», поэтому, если вы должны были запустить этот пакет из приглашения как

 yourbatchname something
  

тогда something это первый параметр.

Вероятно, вам нужно использовать «% change%», а не «% ~ 1».

Примечание: if not defined change вероятно, это лучший тест.

Примечание: простое нажатие Enterпри запросе a set /p не устанавливает переменную пустой. Это оставляет значение неизменным. Лучше всего использовать

 set "var="
set /p var=....
  

Примечание: пакет просто заряжается, инструкция за инструкцией. В нем нет понятия «конец процедуры». Следовательно, если ваша запись Y не является ни N (как только вы решите %~1 проблему), batch просто продолжит выполнение после if операторов до следующего — ECHO Y SELECTED.