У меня есть командный файл, который автоматизирует для меня копирование группы файлов из одного места в другое и обратно. Единственное, насколько это мне помогает, я продолжаю случайно выбирать эту команду из своего буфера команд и массово перезаписывать незавершенные изменения.
Какой код мне понадобится для моего .bat-файла, чтобы он говорил «вы уверены?» И заставлял вводить «y», прежде чем он запустил остальную часть файла? Если набрано что-либо, кроме "y", выполнение должно завершиться на этой строке.
Изменить 27 ноября. Хорошо, я снова пометил это как неотвеченное, потому что до сих пор не могу понять. Когда я призываю «выйти»; он закрывает cmd.exe, чего я не хочу. Все это потому, что Windows неправильно реализовала буфер команд [по крайней мере, не так, как я привык]
источник
SET AREYOUSURE=N
перед подсказкой, чтобы очистить выбор, если вы уже запускали сценарий ранее в этом командном окне. Без него по умолчанию останется выбранный ранее выбор.setlocal
иendlocal
должен позаботиться об этом.%AREYOUSURE%
больше не будет существовать послеendlocal
.попробуйте команду CHOICE , например
источник
choice
Команда не доступна везде. В более новых версиях Windows уset
команды есть/p
возможность получить ввод пользователясм.
set /?
для получения дополнительной информацииисточник
Для подсказок пользователя в командной строке Windows доступны две команды:
/P
доступной во всех версиях Windows NT с включенными расширениями команд иset - это внутренняя команда командного процессора Windows
cmd.exe
. Возможность/P
запрашивать у пользователя строку доступна только при включенных расширениях команд, которые включены по умолчанию, поскольку в противном случае в настоящее время почти ни один пакетный файл не будет работать.choice.exe - это отдельное консольное приложение (внешняя команда), расположенное в
%SystemRoot%\System32
.choice.exe
Windows Server 2003 можно скопировать в каталог%SystemRoot%\System32
на компьютере с Windows XP для использования в Windows XP, как и многие другие команды, недоступные по умолчанию в Windows XP, но доступные по умолчанию в Windows Server 2003.Лучше всего использовать CHOICE вместо SET / P по следующим причинам:
/C
(и Ctrl+C), и выдает звуковой сигнал ошибки, если пользователь нажимает неправильную клавишу.echo Y | call PromptExample.bat
использования CHOICE .cmd
из-за синтаксической ошибки или к выполнению команд, не включенных вообще в командный файл, на не хорошо закодированный командный файл. Требуются некоторые усилия, чтобы защитить SET / P от ошибочного или намеренно неправильного ввода пользователя.Вот пример подсказки с использованием предпочтительного выбора CHOICE и альтернативы SET / P на
choice.exe
недоступном на используемом компьютере под управлением Windows.Примечание. В этом пакетном файле используются расширения команд, которые недоступны в Windows 95/98 / ME, которые используются
command.com
вместоcmd.exe
интерпретатора команд.Командная строка
set "UserChoice=!UserChoice: =!"
добавлена для того, чтобы можно было вызывать этот командный файлecho Y | call PromptExample.bat
в Windows NT4 / 2000 / XP и не требовать использованияecho Y| call PromptExample.bat
. Он удаляет все пробелы из строки, считанной из STDIN, перед запуском двух сравнений строк.echo Y | call PromptExample.bat
приводит к тому, что YSPACE присваивается переменной средыUserChoice
. Это приведет к обработке запроса дважды, поскольку"Y "
регистр не равен"N"
ни"Y"
без удаления всех пробелов. Таким образом ,UserChoice
с YSPACE в качестве значения приведет запуск быстрое второй раз с параметром ,N
как определено по умолчанию в пакетном файле на второй оперативное выполнение которых следующая приводит к неожиданному выходу из пакетной обработки файлов. Да, безопасное использование SET / P действительно сложно, не так ли?Дополнительные сведения об использовании SET / P и CHOICE для запроса пользователю выбора из списка параметров см. В ответе на вопрос, как остановить интерпретатор команд Windows от выхода из выполнения командного файла при неправильном вводе пользователя?
Еще несколько подсказок:
UserChoice
withN
иY
, а значение,UserChoice
окруженное"
with"N"
и"Y"
.EQU
иNEQ
предназначены в первую очередь для сравнения двух целых чисел в диапазоне от -2147483648 до 2147483647, а не для сравнения двух строк.EQU
иNEQ
работают также для сравнения строк, но приводят к сравнению строк в двойных кавычках при бесполезной попытке преобразовать левую строку в целое число.EQU
иNEQ
может использоваться только с включенными расширениями команд. Операторы сравнения для сравнения строк - это==
и,not ... ==
которые работают даже с отключенными расширениями команд, поскольку дажеcommand.com
MS-DOS и Windows 95/98 / ME уже поддерживали их. Дополнительные сведения об операторах сравнения IF см. В разделе « Символ, эквивалентный NEQ, LSS, GTR и т. Д. В пакетных файлах Windows» .goto :EOF
требует наличия включенных расширений команд, чтобы действительно завершить обработку пакетного файла. Подробнее см. Куда возвращается GOTO: EOF?Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните следующие команды и внимательно прочитайте все страницы справки, отображаемые для каждой команды.
choice /?
echo /?
endlocal /?
goto /?
if /?
set /?
setlocal /?
Смотрите также:
Это объясняет причину использования синтаксиса
set "variable=value"
для присвоения строки переменной среды.if errorlevel X
поведении и операторе&
.|
и обработки STDIN .SystemRoot
.источник
CHOICE.COM
по умолчанию в MS-DOS 6.0, MS-DOS 7.0, Windows 95 и Windows 98. Но оно не былоchoice.exe
установлено по умолчанию в Windows NT4, Windows 2000 и Windows XP.CHOICE.COM
может использоваться также в NT4, Windows 2000 и Windows XP, но было бы лучше использовать 32-битную версиюchoice.exe
из соответствующего набора ресурсов. См. Страницу Роба ван дер Вуда о CHOICE . Варианты частично различаются междуCHOICE.COM
иchoice.exe
. Однако вопрос не в DOS.Здесь немного проще:
или
источник
%errorlevel%
всегда целочисленное значение. Смотрите здесь документацию, включая пример.Вот мой метод ответа да / нет .
Он также нечувствителен к регистру.
Это просто проверяет наличие ошибок, заданных вводом, и устанавливает для
choice
переменной все, что вам нужно, чтобы ее можно было использовать ниже в коде.источник
Если вы хотите, чтобы пакетная программа вернулась в командную строку и не закрывала ее (AKA cmd.exe), вы можете использовать команду «exit / b».
Это может помочь.
Или, если вы не хотите использовать столько строк ...
Надеюсь это поможет...
источник
Вот простой пример, который я использую в сценарии резервного копирования (.bat / batch) в Windows 10, что позволяет мне использовать различные параметры при создании резервных копий.
Вы можете иметь столько блоков, сколько вам нужно.
источник
Сначала откройте терминал.
Затем введите
Затем откройте .sure и вставьте его внутрь.
После этого закройте файл.
Перед тем, как продолжить выполнение команды, вам будет предложено указать, уверены ли вы.
источник
Вы можете рассмотреть возможность использования подтверждения пользовательского интерфейса.
С yesnopopup.bat
пользователь увидит следующее, и в зависимости от выбора сценарий продолжит работу:
с абсолютно тем же сценарием вы можете также использовать iexpYNbutton.bat, который будет создавать аналогичные всплывающие окна.
С помощью buttons.bat вы можете попробовать следующий скрипт:
и пользователь увидит:
источник
Открыть терминал. Введите следующее
Вставьте это в sure.sh
Закройте файл sure.sh и введите его в терминал.
Теперь, если вы введете "уверен" перед вводом команды, перед продолжением команды появится запрос "уверены ли вы".
Надеюсь, это будет полезно!
источник