Анонимный пользователь
Дополнительно
В Windows cmd, как мне запросить пользовательский ввод и использовать результат в другой команде?
У меня есть файл Windows .bat, который я хотел бы принять пользовательским вводом, а затем использовать результаты этого ввода как часть вызова дополнительных команд.
Например, я хотел бы принять идентификатор процесса от пользователя, а затем запустить jstack против этого идентификатора, поместив результаты jstack call в файл. Однако, когда я пытаюсь это, это не работает.
Вот мой образец содержимого файла летучей мыши:
@echo off
set /p id=Enter ID:
echo %id%
jstack > jstack.txt
и вот что появляется на jstack.txt:
& Лт; pre > Введите ID: Завершить пакетное задание (Да / Нет)? & Лт; / pre >
360
12
Попробуйте это:
Затем вы можете использовать
% id%
в качестве параметра для другого пакетного файла, такого какjstack% id%
.Например:
Синтаксис таков:
set / p variable = [string]
Проверьте http://commandwindows.com/batch.htm или http://www.robvanderwoude.com/userinput.php для более глубокого погружения в пользовательский ввод с различными версиями пакетных файлов ОС Windows.
После того, как вы установили свою переменную, вы можете использовать ее следующим образом.
обратите внимание на синтаксис
% VariableName%
Я не уверен, что это относится ко всем версиям Windows, однако на компьютере XP мне нужно использовать следующее:
Без строки приглашения в кавычках я получаю различные результаты в зависимости от текста.
Пространство после
=
очень важно.если я получу то, что вы хотите, это работает нормально. Вы также можете использовать% input% в других командах.
Для SETX нет документированного / ускоренного параметра, как для SET
Если вам нужно запросить переменную среды, которая переживет перезагрузки, вы можете использовать SETX для ее хранения.
Переменная, созданная SETX, не будет использоваться, пока вы не перезапустите командную строку. Однако вы можете SETX переменную, которая уже была SET, даже если она имеет то же имя.
Это работает для меня в Windows 8.1 Pro:
(Цитаты вокруг существующей переменной необходимы.)
Эта процедура позволяет вам использовать временную переменную, созданную SET, во время текущего сеанса и позволит вам повторно использовать переменную, созданную SETX, при перезагрузке компьютера или перезапуске приглашения CMD.
(Редактируется для правильного форматирования абзацев кода.)
Есть две возможности.
Вы забыли поместить
% id%
в вызовjstack
.Таким образом, весь правильный пакетный файл должен быть:
И / или 2. Вы поместили его в код (и забыли сообщить нам в вопросе), но когда вы запустили пакетный файл, вы нажали клавишу Enter вместо ввода идентификатора (скажем, 1234).
То, что происходит, является результатом этих двух ошибок:
jstack
должен называться с идентификатором, который вы ему предоставляете.Но в вашем случае (в соответствии с кодом, который вы указали в вопросе) вы назвали его без каких-либо переменных. Вы написали:
Поэтому, когда вы запускаете
jstack
без переменной, он выводит следующее:Ваша вторая ошибка заключается в том, что вы нажали 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.
У меня есть небольшой cmd, который я использую при подготовке компьютера к клиентам: он вызывает пользователя для ввода и переименовывает компьютер в это.
Знаки доллара вокруг переменной не работают на моей машине Vista, но знаки процента работают. Также обратите внимание, что между приглашением и пользовательским вводом появится пробел в строке «set».
Просто добавил
последовательность моей сетевой пакетной работы. Теперь он показывает мне местоположение, на которое я отвечаю, как точку для этого образца. Я постоянно > > выходной файл, чтобы я знал теперь «home», «work», «Starbucks» и т. д. В поисках чистого воздуха я могу эвулировать каналы с самым низким уровнем использования и наличие вокруг 5 или всего 2,4 МГц WLAN.
Просто чтобы сохранить значение переменной по умолчанию. Нажмите Enter, чтобы использовать значение по умолчанию при недавнем запуске .bat:
В первом запуске просто проигнорируйте сообщение об отсутствии файла с начальным значением переменной (или создайте Var1.txt вручную).