#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.