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.
-
U bent vergeten de
%id%
in dejstack
CALL 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:
jstack
HEEFT 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 jstack
zonder 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 set
Commando !! 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.txt
in 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