In Windows Cmd, hoe vraag ik dan om gebruikersinvoer en gebruik ik het resultaat in een andere opdracht?

Ik heb een Windows .bat-bestand dat ik wil accepteren gebruikersinvoer en gebruik vervolgens de resultaten van die ingang als onderdeel van de oproep aan aanvullende opdrachten.

Ik wil bijvoorbeeld een proces-ID van de gebruiker accepteren en vervolgens Jstack tegen die ID uitvoeren, de resultaten van de JSTACK-oproep in een bestand plaatsen. Wanneer ik dit echter probeer, werkt het niet.

Hier is de inhoud van mijn voorbeeld vleermuis:

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

en hier is wat verschijnt in jstack.txt:

Enter ID: Beëindig Batch Job (Y / N)?

Antwoord 1, Autoriteit 100%

Probeer dit:

@echo off
set /p id="Enter ID: "

U kunt dan %id%gebruiken als een parameter met een ander batchbestand zoals jstack %id%.

Bijvoorbeeld:

set /P id=Enter id: 
jstack %id% > jstack.txt

Antwoord 2, Autoriteit 20%

De syntaxis is als zodanig: set /p variable=[string]

Uitchecken http://commandwindows.com/batch.htm of http://www.robvanderwoude.com/userinput.php voor een meer diepe duik in de gebruikersinvoer met de verschillende versies van Windows OS BATCH-bestanden.

Nadat u uw variabele hebt ingesteld, kunt u deze vervolgens op de volgende mode gebruiken.

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

Let op de %VariableName%syntaxis


Antwoord 3, Autoriteit 8%

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

De ruimte na =is erg belangrijk.


Antwoord 4, Autoriteit 6%

Ik ben niet zeker of dit het geval is voor alle versies van Windows, maar op de XP-machine die ik heb, moet ik het volgende gebruiken:

set /p Var1="Prompt String"

Zonder de Prompt String in Quotes krijg ik verschillende resultaten afhankelijk van de tekst.


Antwoord 5, Autoriteit 3%

@echo off
set /p input="Write something, it will be used in the command "echo""
echo %input%
pause

Als ik krijg wat je wilt, werkt dit prima. U kunt ook% input% in andere opdrachten gebruiken.

@echo off
echo Write something, it will be used in the command "echo"
set /p input=""
cls
echo %input%
pause 

Antwoord 6, Autoriteit 2%

Er is geen gedocumenteerde / prompte parameter voor SETX omdat er voor set is.

Als u moet vragen om een ​​omgevingsvariabele die zal overleven, kunt u SETX gebruiken om deze op te slaan.

Een variabele gemaakt door SETX zal niet bruikbaar zijn totdat u de opdrachtprompt opnieuw start. Netjes, u kunt echter een variabele instellen die al is ingesteld, zelfs als het dezelfde naam heeft.

Dit werkt voor mij in Windows 8.1 Pro:

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

(de aanhalingstekens rond de bestaande variabele zijn noodzakelijk.)

Met deze procedure kunt u de tijdelijke ingestelde variabele gebruiken tijdens de huidige sessie en kunt u de setx-gecreëerde variabele opnieuw gebruiken bij het opnieuw opstarten van de computer of opnieuw opstarten van de CMD-prompt.

(bewerkt om CODE-paragrafen correct te formatteren.)


Antwoord 7, Autoriteit 2%

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

Antwoord 8

Er zijn twee mogelijkheden.

  1. U bent vergeten de %id%in de jstackCALL te plaatsen.

    jstack %id% > jstack.txt
    

Dus het volledige juiste batchbestand moet zijn:

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

en / of 2. U hebt het in de code (en vergat het ons in de vraag te vertellen) maar wanneer u het batchbestand liep, drukt u op de ENTER-toets in plaats van een ID te typen (zeg 1234).

Wat gebeurt er is het resultaat van deze twee fouten:
jstackHEEFT GEBRUIKT MET DE ID AANGEVOERD DAT JE HET VOEREN.

Maar in uw geval (volgens de code die u in de vraag hebt geleverd), noemde u het zonder enige variabele. Je schreef:

jstack > jstack.txt

Dus wanneer u jstackzonder variabele, voert het het volgende uit:

Terminate batch file Y/N? 

Uw tweede fout is dat u ingedrukt hebt ingedrukt in plaats van een waarde te geven wanneer het programma u heeft gevraagd: Enter ID:. Als u op dit punt in een ID zou hebben gezet, zeg 1234, de %id%variabele zou die waarde worden, in onze zaak 1234. Maar u hebt geen waarde aangeleverd en in plaats daarvan ingedrukt. Wanneer u de variabele elke waarde niet geeft, en indien die variabele niet eerder op iets anders is ingesteld, is de variabele %id%ingesteld op de prompt van de setCommando !! Dus nu %id%is ingesteld op Enter ID:WAT IS ECHOED OP JE SCHERM Zoals gevraagd in het batchbestand voordat u de JSTACK noemde.

Maar ik vermoed dat je de jstack %id% > jstack.txtin uw batchbestandscode met de %id(en per ongeluk weggelaten uit de vraag), en dat u op enter drukt zonder een id in te voeren. Het batchprogramma herhaalde vervolgens de id, die nu “Enter ID:” is, en voerde vervolgens jstack Enter ID: > jstack.txt

Jstack zelf herhaalde de invoer, kwam een fout tegen en vroeg om te beëindigen.
En dit alles werd in het jstack.txt-bestand geschreven.


Antwoord 9

Ik heb een kleine cmd die ik gebruik bij het voorbereiden van pc voor clients: het roept de gebruiker op voor invoer en hernoemt de pc daarnaar.

@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

Antwoord 10

Dollartekens rond de variabele werken niet op mijn Vista-machine, maar procenttekens wel.
Merk ook op dat er een spatie op de regel “set” zal verschijnen tussen de prompt en de gebruikersinvoer.


Antwoord 11

Je kunt het ook proberen met userInput.batdie het html-invoerelement gebruikt.

Hiermee wordt de invoer toegewezen aan de waarde jstackId:

call userInput.bat jstackId
echo %jstackId%

Hiermee wordt alleen de invoerwaarde afgedrukt die u uiteindelijk kunt vastleggen met FOR /F:

call userInput.bat

Antwoord 12

Zojuist de

. toegevoegd

set /p NetworkLocation= Enter name for network?
echo %NetworkLocation% >> netlist.txt

volgorde van mijn netsh-batchtaak. Het laat me nu de locatie zien waarop ik reageer als het punt voor dat monster. Ik continu >> het uitvoerbestand zodat ik nu “thuis”, “werk”, “Starbucks”, enz. weet. Op zoek naar heldere lucht, kan ik de kanalen met het laagste gebruik bekijken en of er 5 of alleen alle 2,4 MHz WLAN’s in de buurt zijn.


Antwoord 13

Gewoon om een standaardwaarde van de variabele te behouden. Druk op Enter om de standaardwaarde van de recente uitvoering van uw .bat te gebruiken:

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

Negeer bij de eerste run gewoon het bericht over het ontbreken van een bestand met de initiële waarde van de variabele (of maak de Var1.txt handmatig aan).


Antwoord 14

Een andere manier die misschien interessant is. Je kunt een powershell-script aanroepen van waaruit je vrijwel alles kunt doen, en de data-bach naar cmd sturen of andere dingen doen met zoiets als dit.

set var=myvar; 
call "c:\input2.cmd" %var%. 

Het is een beetje flexibeler (u kunt de gegevens op dezelfde manier verzenden met powershell).

Dus schrijf dit in je cmd, aangezien het ps-script in C:staat:

PowerShell.exe -ExecutionPolicy unrestricted -Command "& {. C:\Input.ps1}"

En schrijf dit in je input.ps1-script:

$var = Read-Host -Prompt "Your input"
Write-Host "Your var:",$var
#Do stuff with your variable

Other episodes