development

Windows cmd에서 사용자 입력을 요청하고 다른 명령에서 결과를 사용하려면 어떻게합니까?

big-blog 2020. 2. 29. 15:27
반응형

Windows cmd에서 사용자 입력을 요청하고 다른 명령에서 결과를 사용하려면 어떻게합니까?


사용자 입력을 수락하고 추가 명령 호출의 일부로 해당 입력 결과를 사용하려는 Windows .bat 파일이 있습니다.

예를 들어, 사용자로부터 프로세스 ID를 수락 한 다음 해당 ID에 대해 jstack을 실행하여 jstack 호출의 결과를 파일에 넣습니다. 그러나 이것을 시도하면 작동하지 않습니다.

다음은 샘플 박쥐 파일 내용입니다.

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

jstack.txt에 표시되는 내용은 다음과 같습니다.

ID 입력 : 일괄 작업 종료 (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를 윈도우 OS의 배치 파일의 서로 다른 버전의 사용자 입력에 더 깊이 잠수.

변수를 설정하면 다음과 같은 방식으로 변수를 사용할 수 있습니다.

@echo off
set /p UserInputPath=What Directory would you like?
cd C:\%UserInputPath%

%VariableName%구문에 주목


이것이 모든 버전의 Windows에 해당되는지 확실하지 않지만 XP 시스템에서 다음을 사용해야합니다.

set /p Var1="Prompt String"

quotes에 프롬프트 문자열이 없으면 텍스트에 따라 다양한 결과가 나타납니다.


set /p choice= "Please Select one of the above options :" 
echo '%choice%'

이후의 공간 =은 매우 중요합니다.


@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 

@echo off
:start
set /p var1="Enter first number: "
pause

SET와 마찬가지로 SETX에 대해 문서화 된 / prompt 매개 변수가 없습니다.

재부팅 후에도 지속될 환경 변수를 묻는 메시지가 표시되면 SETX를 사용하여 저장할 수 있습니다.

SETX로 만든 변수는 명령 프롬프트를 다시 시작할 때까지 사용할 수 없습니다. 그러나 이름이 같더라도 이미 SET 된 변수를 SETX 할 수 있습니다.

이것은 Windows 8.1 Pro에서 작동합니다.

set /p UserInfo= "What is your name?  "
setx UserInfo "%UserInfo%"

(기존 변수 주위에 따옴표가 필요합니다.)

이 절차를 통해 현재 세션 중에 임시 SET 작성 변수를 사용할 수 있으며 컴퓨터를 재부팅하거나 CMD 프롬프트를 다시 시작할 때 SETX 작성 변수를 재사용 할 수 있습니다.

(코드 단락의 형식을 올바르게 지정하도록 편집되었습니다.)


클라이언트에게 pc를 준비 할 때 사용하는 작은 cmd가 있습니다. 사용자에게 입력을 요청하고 pc의 이름을 바꿉니다.

@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

두 가지 가능성이 있습니다.

  1. 당신 %id%jstack전화를 걸 잊어 버렸습니다 .

    jstack %id% > jstack.txt
    

따라서 전체 배치 파일은 다음과 같아야합니다.

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

그리고 / 또는 2. 코드에 넣고 질문에 우리에게 알려주는 것을 잊어 버렸습니다.하지만 배치 파일을 실행할 때 ID를 입력하는 대신 Enter 키를 누르십시오 (1234).

무슨 일이 일어나고 있는지는이 두 가지 실수의 결과입니다 jstack. 제공 한 ID로 호출되어야합니다.

그러나 귀하의 경우 (질문에 제공 한 코드에 따라) 변수없이 호출했습니다. 당신은 썼습니다 :

jstack > jstack.txt

따라서 jstack변수없이 실행 하면 다음이 출력됩니다.

Terminate batch file Y/N? 

두 번째 실수는 프로그램이 다음과 같은 질문을 할 때 값을 제공하는 대신 Enter를 눌렀다는 것 Enter ID:입니다. 이 시점에서 ID (예 : 1234)를 입력 한 경우 %id%변수는 해당 값이됩니다 (이 경우 1234). 그러나 값을 제공하지 않고 대신 Enter를 누르십시오. 변수에 값을 지정하지 않고 해당 변수가 이전에 다른 것으로 설정되지 않은 경우 변수는 명령 %id%의 프롬프트로 설정됩니다 set!! 이제 jstack을 호출하기 전에 배치 파일에서 요청한대로 화면에 에코되는 것으로 %id%설정되었습니다 Enter ID:.

그러나 jstack %id% > jstack.txt배치 파일 코드에 DID가 있고 %id(질문에서 실수로 생략 했음 ) ID를 입력하지 않고 Enter 키를 누른 것으로 생각합니다. 그런 다음 배치 프로그램이 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 배치 작업 순서. 이제 샘플의 포인트로 반응하는 위치를 보여줍니다. 나는 지속적으로 >> 출력 파일을 알고 있으므로 이제 "홈", "작업", "스타 벅스"등을 알 수 있습니다. 맑은 공기를 찾고, 가장 낮은 사용 채널을 탐색 할 수 있으며 주변에 5 개 또는 모든 2.4MHz WLAN이 있는지 여부를 알 수 있습니다.


변수의 기본값을 유지하십시오. 최근 .bat 실행에서 기본값을 사용하려면 Enter를 누르십시오.

@echo off
set /p Var1=<Var1.txt
set /p Var1="Enter new value ("%Var1%") "
echo %Var1%> Var1.txt

rem YourApp %Var1%

첫 번째 실행에서 변수의 초기 값을 가진 파일 부족에 대한 메시지를 무시하십시오 (또는 Var1.txt를 수동으로 작성하십시오).

참고 : https://stackoverflow.com/questions/1223721/in-windows-cmd-how-do-i-prompt-for-user-input-and-use-the-result-in-another-com



반응형