2017-07-07 17 views
2

(Dies ist mein erster Beitrag hier, also ertragen Sie mit mir)Batch: Letzte Benutzereingaben anzeigen

Können Sie die letzte Benutzereingabe in einer Batchdatei anzeigen? Ich werde versuchen, es hier einfach zu halten.

@echo off 

:menu 
echo Type 1 to proceed. 
set /p example= 
if "%example%" == "1" GOTO :proceed 
GOTO :error 

:proceed 
pause 

:error 
cls 
echo You wrote (last user input), that's not correct. 
timeout 30 
GOTO :menu 

Ich weiß, dass ich die (letzte Benutzereingabe) mit% -Beispiel% ersetzen, aber dann müsste ich, um benutzerdefinierte Fehlermeldungen für jede Kategorie zu machen, und es gibt etwa 50 von ihnen. Es wäre einfacher mit einem letzten Eingabebefehl.

Übrigens, ich habe mir alles beigebracht, was ich über Batch weiß, also hat mein Beispiel wahrscheinlich jetzt große Probleme, aber es funktioniert irgendwie.

Antwort

1

Sie können alle Benutzereingaben in einer Funktion (USER_INPUT) zentralisieren

:menu1 
echo Type 1 to proceed. 
call :userInput example 
if "%example%" == "1" GOTO :proceed 
GOTO :error 

:menu2 
echo Type 42 to proceed. 
call :userInput answer 
if "%answer%" == "42" GOTO :proceed 
GOTO :error 

:userInput 
set /p LAST_INPUT= 
set "%1=%LAST_INPUT%" 
exit /b 

:proceed 
pause 

:error 
cls 
echo You wrote "%LAST_INPUT%", that's not correct. 
timeout 30 
GOTO :menu 
+0

Ja. Das ist besser. + 1 – npocmaka

1

Ich weiß nicht, wie es ohne temporäre Datei geht. Bekommen die Dinge int der Konsole müssen Sie die doskey /history (dies wird den Ablauf des Skripts überspringen selbst):

@echo off 
setlocal enableDelayedExpansion 
set "last=" 
set "but_last=" 
doskey /history > log.txt 
for /f "tokens=* delims=" %%# in (log.txt) do (
    set "but_last=!last!" 
    set "last=%%#" 
) 

echo "%but_last%" 
del /s /q log.txt >nul 2>nul 
+0

Gut Lösung, aber vielleicht ein bisschen Overkill :-) – jeb

Verwandte Themen