Ответ 1
Попробуй это:
@echo off
set /p id="Enter ID: "
Затем вы можете использовать %id%
в качестве параметра для другого пакетного файла, такого как jstack %id%
.
Например:
set /P id=Enter id:
jstack %id% > jstack.txt
У меня есть Windows.bat файл, который я хотел бы принять для ввода пользователем, а затем использовать результаты этого ввода как часть вызова дополнительных команд.
Например, я хотел бы принять идентификатор процесса от пользователя, а затем запустить jstack против этого идентификатора, помещая результаты вызова jstack в файл. Однако, когда я пытаюсь это сделать, это не работает.
Вот мой пример файла bat bat:
@echo off
set /p id=Enter ID:
echo %id%
jstack > jstack.txt
и вот что отображается в jstack.txt:
Enter ID: Terminate batch job (Y/N)?
Попробуй это:
@echo off
set /p id="Enter ID: "
Затем вы можете использовать %id%
в качестве параметра для другого пакетного файла, такого как jstack %id%
.
Например:
set /P id=Enter id:
jstack %id% > jstack.txt
Синтаксис таков: set/p variable=[string]
Посетите http://commandwindows.com/batch.htm или http://www.robvanderwoude.com/userinput.php для более глубокого погружения в пользовательский ввод с различными версиями пакетных файлов ОС Windows.
После того, как вы установили свою переменную, вы можете использовать ее следующим образом.
@echo off
set /p UserInputPath=What Directory would you like?
cd C:\%UserInputPath%
обратите внимание на синтаксис %VariableName%
Я не уверен, что это относится ко всем версиям Windows, однако на машине XP у меня есть, я должен использовать следующее:
set /p Var1="Prompt String"
Без строки приглашения в кавычки я получаю различные результаты в зависимости от текста.
@echo off
set /p input="Write something, it will be used in the command "echo""
echo %input%
pause
если я получу то, что вы хотите, это отлично работает. вы также можете использовать% input% в других командах.
@echo off
echo Write something, it will be used in the command "echo"
set /p input=""
cls
echo %input%
pause
set /p choice= "Please Select one of the above options :"
echo '%choice%'
Пробел после =
очень важен.
@echo off
:start
set /p var1="Enter first number: "
pause
Для SETX не существует документально подтвержденного/приглашающего параметра, как для SET.
Если вам нужно запросить переменную среды, которая выживет при перезагрузке, вы можете использовать SETX для ее сохранения.
Переменная, созданная SETX, не будет использоваться до перезапуска командной строки. Тем не менее, вы можете SETX использовать переменную, которая уже была SET, даже если она имеет то же имя.
Это работает для меня в Windows 8.1 Pro:
set /p UserInfo= "What is your name? "
setx UserInfo "%UserInfo%"
(Необходимы кавычки вокруг существующей переменной.)
Эта процедура позволяет вам использовать временную переменную SET, созданную во время текущего сеанса, и позволит вам повторно использовать созданную SETX переменную при перезагрузке компьютера или перезапустить приглашение CMD.
(Отредактировано для правильного форматирования абзацев кода.)
У меня есть маленький cmd, который я использую при подготовке компьютера к клиентам: он вызывает пользователя для ввода и переименовывает компьютер в него.
@ECHO "remember to run this as admin."
@ECHO OFF
SET /P _inputname= Please enter an computername:
@ECHO Du intastede "%_inputname%"
@ECHO "The pc will restart after this"
pause
@ECHO OFF
wmic computersystem where name="%COMPUTERNAME%" call rename name="%_inputname%"
shutdown -r -f
Есть две возможности.
Вы забыли поместить %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
пакетного файла был jstack %id% > jstack.txt
с %id
(и он опущен по ошибке из вопроса), и что вы нажали ввод без ввода идентификатора. Затем пакетная программа повторила идентификатор, который теперь является "Enter ID:", а затем запустила jstack Enter ID: > jstack.txt
Jstack сам повторил ввод, обнаружил ошибку и попросил прекратить.
И все это было записано в файл jstack.txt.
Знаки доллара вокруг переменной не работают на моей машине Vista, но знаки процента это делают. Также обратите внимание, что промежуточный пробел в строке "set" будет отображаться между приглашением и пользовательским вводом.
Просто добавил
set /p NetworkLocation= Enter name for network?
echo %NetworkLocation% >> netlist.txt
к моему пакетному заданию netsh. Теперь он показывает мне место, в котором я отвечаю, как точка для этого образца. Я постоянно → выходной файл, поэтому я знаю теперь "home", "work", "Starbucks" и т.д. Ищете чистый воздух, я могу эвакуировать самые низкие каналы использования и есть ли 5 или только все беспроводные локальные сети 2,4 МГц.
Просто чтобы сохранить значение переменной по умолчанию. Нажмите Enter, чтобы использовать значение по умолчанию из недавнего запуска вашего .bat:
@echo off
set /p Var1=<Var1.txt
set /p Var1="Enter new value ("%Var1%") "
echo %Var1%> Var1.txt
rem YourApp %Var1%
В первом прогоне просто проигнорируйте сообщение об отсутствии файла с начальным значением переменной (или создайте файл Var1.txt вручную).
попробуй это
set /p input="Input"
echo %input%
txt %id% > txt.txt