Работа с командной строкой — Документация Руководство по командной строке Windows 18.08.2015

В windows cmd как запросить ввод пользователя и использовать результат в другой команде?

Есть две возможности.

  1. Вы забыли поставить %id%в jstackвызове.

    jstack %id% > jstack.txt
    

Таким образом, весь правильный пакетный файл должен быть:

@echo off
set /p id=Enter ID: 
echo %id%
jstack %id% > jstack.txt

И / или 2. Вы поместили его в код (и забыли сообщить нам вопрос), но когда вы запустили пакетный файл, вы нажали клавишу Enter вместо ввода идентификатора (скажем, 1234).

То, что происходит, является результатом этих двух ошибок:
jstackпредполагается, что он вызывается с идентификатором, который вы ему предоставили.

Но в вашем случае (в соответствии с кодом, который вы указали в вопросе) вы назвали его без какой-либо переменной. Вы написали:

jstack > jstack.txt

Поэтому, когда вы работаете jstackбез переменных, выдается следующее:

Terminate batch file Y/N? 

Ваша вторая ошибка состоит в том, что вы нажали Enter вместо того значения , когда программа спрашивает вас: Enter ID:. Если бы вы в этот момент ввели идентификатор, скажем, 1234, %id%переменная стала бы этим значением, в нашем случае 1234. Но вы НЕ указали значение и вместо этого нажали Enter. Когда вы не даете переменной никакого значения, и если для этой переменной ранее не было установлено ничего, тогда переменная %id%устанавливается на приглашение setкоманды !! Так что теперь %id%установлено значение, Enter ID:которое было отображено на вашем экране в соответствии с запросом в командном файле ДО того, как вы вызвали jstack.

Но я подозреваю, что jstack %id% > jstack.txtу вас в коде командного файла был код %id(и он опущен по ошибке из вопроса), и что вы нажали ввод, не вводя идентификатор. Затем пакетная программа повторила идентификатор, который теперь является «Enter ID:», и затем запустилаjstack Enter ID: > jstack.txt

Jstack сам повторил ввод, обнаружил ошибку и попросил прекратить.
И все это было записано в файл jstack.txt.

Как запросить и получить пользовательский ввод в файле. bat и использовать его для запуска определенной программы? | блог о программировании

Если входные данные, скажем, N, ваши строки IF оцениваются следующим образом:

If N=="y" goto yes 
If N=="n" goto no
…

То есть вы сравниваете N с "y", затем "n" и т. д. в том числе "N". Вы никогда не получите совпадение, если пользователь каким-то образом не решит ввести "N" или "y" (то есть любой из четырех символов, но заключенный в двойные кавычки).

:/>  Сочетания клавиш в Microsoft Word 2016 |

Так что вам нужно либо удалить " со всего y, n, Y и N или поместите их вокруг %INPUT% в ваших условных утверждениях. Я бы рекомендовал последнее, потому что таким образом вы бы экранировали по крайней мере некоторые символы, которые имеют особое значение в пакетных сценариях (если пользователю удалось их ввести). Итак, вот что вы должны получить:

If "%INPUT%"=="y" goto yes 
If "%INPUT%"=="n" goto no
If "%INPUT%"=="Y" goto yes
If "%INPUT%"=="N" goto no

Кстати, вы можете уменьшить число условий, применив переключатель /I к оператору IF, например:

If /I "%INPUT%"=="y" goto yes 
If /I "%INPUT%"=="n" goto no

Переключатель /I делает сравнение нечувствительным к регистру, и поэтому вам не нужны отдельные проверки для строк с разными регистрами.

Один другая проблема заключается в том, что после выполнения команды режима разработки нет возможности перепрыгнуть через другую команду, и поэтому, если пользователь соглашается запустить Java в режиме разработки, он получит ее запуск как в режиме разработки, так и в режиме без разработки. Поэтому, возможно, вам нужно добавить что-то вроде этого в свой скрипт:

...
:yes
java -jar lib/RSBot-4030.jar -dev
echo Starting RSbot in developer mode
goto cont
:no
java -jar lib/RSBot-4030.jar
echo Starting RSbot in regular mode
:cont
pause

Наконец, чтобы решить проблему обработки неверных входных данных, вы можете просто добавить другую (безусловную) команду goto сразу после условных операторов, просто перед меткой yes, а именно goto Ask, чтобы вернуться к началу вашего скрипта, где отображается приглашение и запрашивается ввод, или вы могли бы также добавить другую команду ECHO перед прыжком, объясняя, что ввод был неправильным, что-то вроде этого:

@echo off
:Ask
echo Would you like to use developer mode?(Y/N)
set INPUT=
set /P INPUT=Type input: %=%
If /I "%INPUT%"=="y" goto yes 
If /I "%INPUT%"=="n" goto no
echo Incorrect input & goto Ask
:yes
...

Примечание: некоторые из упомянутых здесь вопросов также были рассмотрены @xmjx в своем ответе, который я полностью признаю.

Урок 2 по cmd – операторы командной строки |

В этой статье мы рассмотрим базовые операторы cmd командной строки ввода-вывода данных, математические выражении, а также операторы, которые позволяют объединить несколько команд.

Урок второй по комаедной строке

Командная строка позволяет передавать значения или данные не только в консольном окне, но и за его пределами. Так, можно перенаправить результат выполнения утилиты в файл, или же наоборот, извлечь данные хранящиеся во внешнем файле и передать их как параметры.

:/>  Компьютер не видит принтер Canon

Давайте посмотрим на следующие операторы командной строки:

  • Команда1 | команда2 – результат, полученный после выполнения команды1 будет служить как входной параметр для команды2.
  • Команда<[путь] имя файла – Тут команда принимает содержимое файла как входной параметр.
  • Команда>[путь] имя файла – Результат выполнения команды будет выведен не на экран консоли, а во внешний файл. Если указанного внешнего файл нет, то он будет создан, если файл существует – произойдет его перезапись.
  • Команда>>[путь] имя файла – Аналог предыдущей команды, но тут, если файл существует, до данные допишутся в конец уже имеющихся в нем данных.
  • Команда<[путь] имя файла> [путь] имя файла – в данном примере, данные, из внешнего файла передаются команде как параметры, а вывод результата будет направляться в другой внешний документ.

операторы командной строки

Как вы уже заметили, перенаправление данных осуществляется с помощью четырех операторов (cmd) командной строки: вывод (>, >>) и ввод (< ,<<), при чем, если стрелочка используется в комбинации с файлом один раз, то произойдет его полная перезапись, если дважды – то произойдет дописывание данных. Если не указывать полный путь, а просто прописать имя файла, то он создастся в той папке, из которой происходит запуск команды.

Теперь давайте обратим внимание на оператор конвейеризации (“|”), он довольно удобен, так как позволяет передавать результат выполнения из одной команды сразу в другую, а из той в третью и так далее.

Для примера, утилита dir позволяет получить список файлов и папок, а утилита find отвечает за поиск в документах, или в тексте ввода и выводит строки, соответствующие условию. Так, следующая команда покажет список всех файлов с расширение .txt в текущем каталоге:

В данном случае утилита dir возвращает список файлов и папок в текущем каталоге, данный список передается как входной параметр утилите find (сотрите статью “Утилита FIND“), и уже в этом списке происходит поиск вхождения “.txt”.

Следующие операторы командной строки, которые стоит рассмотреть, это &, && и ||:

Как видим, операторы командной строки (cmd), приведенные выше позволяют значительно сэкономить программный код и в некоторых случаях заменить условный оператор if и даже цикл.

Стоит учитывать один важный момент. При выполнении группы команд, их обязательно стоит заключать в круглые скобки, иначе произойдет совсем другой результат, чем ожидалось. Посмотрим на следующий пример:

:/>  Создаем лица в DAToolset

Сперва покажется, что в файл log.txt должно вывестись содержимое текущего каталога, настройки сети и имя компьютера, но это не так! Файл будет содержать только результат выполнения команды hostname. Что бы все сработало правильно, нужно все три команды заключить в круглые скобки:

Хорошо теперь давайте рассмотри математические операторы cmd (командной строки). Как и в зыках программирования vbscript и jscript сервера Windows Script Host, в сценариях cmd присутствуют следующие математические выражения:

Что бы произвести математическое вычисление, нужно использовать ключевое слово set с ключом (арифметика). Это связано с тем, что любое значении, которое присваивается переменной будет типа “строка”, а ключ /А говорит системе, что мы хотим работать с цифрами. Откройте редактор и пропишите в нем следующий код, далее сохраните как test.bat:

Что бы вам не приходилось делать дополнительные переходы, а вы могли запустить сценарий из любой директории в окне командной строки, просто пропишите:

Тут <путь> – путь к каталогу, в котором вы храните свой сценарий.

Вернемся к примеру, в данному примере с помощью ключевого слова set мы объявляем переменную var1, которая будет хранить сумму чисел 100 и 25, после происходит вывод результата на экран. Далее мы используем остальные математические операции с подальшим выводом результата.

Диапазон поддерживаемых цифр от -2 в 32 степени до 2 в 32 степени, при выходе за эту границу, возникнет ошибка с кодом -2. Можно проводить вычисления не только с цифрами, но и со значениями переменных:

В данном случае мы сначала объявляем две переменные, var2 со значением 100 и var3 со значением 200, потом в переменной var1 происходит сложении значений двух переменных, и деление результата на два с подальшим его выводом на экран.

Полезную роль могут сыграть операторы сравнения:

операторы cmd

Подобные операторы применяются и в языке jscript и позволяют вместо такой строки:

прописать такую:

И так, в этой статье мы рассмотрели базовые cmd операторы командной строки.

Спасибо за внимание. Автор блога

Оставьте комментарий

Adblock
detector