
set /p codename="Please enter the codename! "
if exist %codename% = Candy, Sugar, Lollipop (
echo The code you entered is not available.
)
Wenn der Benutzer %codename% als Candy, Sugar oder Lollipop usw. eingibt, gibt es eine Möglichkeit, das Echo so einzustellen, dass es „Der eingegebene Code ist nicht verfügbar“ sagt und dann das Echo anhält?
Wenn der Benutzer etwas anderes als diese drei eingibt, wird das Skript weiter ausgeführt.
Wie kann ich das machen?
Antwort1
Sie können mehrere Zeichenfolgen verwenden, um Benutzereingaben zu validieren mitfindstr
:
echo/%codename% |%__APPDIR__%findstr.exe "Candy Sugar Lollipop" >nul && goto :Next
1)echo/%codename%
(String-Input) zufindstr
(Zeichenfolge suchen),
2) Nutzung/i
Groß-/Kleinschreibung wird nicht beachtetwenn nötig, wenn nicht, entfernen/i
3) Wenn eine Übereinstimmung besteht,goto :next
Label... wenn nicht, wird die nächste Zeile ausgeführt...
4) Dem Benutzer wird ein Echo/Ihre Nachricht und ein Timeout angezeigt, während er darauf wartet, dass der Benutzer eine beliebige Taste drückt
5)goto :EOF
(Dateiende), dasselbe wie Beenden/Abbrechen/Beenden Ihres BAT-Geräts.
@echo off & setlocal
set /p codename="Please enter the codename! "
echo/%codename% |%__APPDIR__%findstr.exe "Candy Sugar Lollipop" >nul && goto :Next
echo/The code you entered is not available^!! & %__APPDIR__%timeout -1 & goto :EOF
:Next
rem :: your code continue here...`
- Obs.Wenn Benutzereingaben nur eingeben, können Sie diese einschränken in:
if !_cnt! equ 3
@echo off & setlocal EnableDelayedExpansion
:loop
set /p codename="Please enter the codename! "
set /a "_cnt+=1+0"
if !_cnt! equ 3 (
echo/Maximum number of attempts allowed exceeded^!!
goto :Error ) else if "!codename!"=="" goto :loop
echo/!codename! |%__APPDIR__%findstr.exe "Candy Sugar Lollipop" >nul && goto :Next
:Error
echo/The code you entered is not available^!! & %__APPDIR__%timeout -1
endlocal & goto :EOF
:Next
rem :: your code continue here...
Antwort2
If exist ist die falsche Vergleichsform für variable Inhalte. Die richtige Form wäre:
If "%variable%"=="desired value" (command)
Wenn derselbe Befehl für einen beliebigen zulässigen Wert ausgeführt werden soll, können Sie eine For-Schleife wie die folgende verwenden:
For %%A In (Candy,Sugar,Lollipop) Do (
If /I "%codename%"=="%%A" (
Call :CodeTrue
)
)
Als Funktion am Ende Ihres Skripts
:CodeTrue
Pause
Rem other commands
Exit /b
Antwort3
Wenn Sie zu PowerShell wechseln können:
$NewName = Read-host -Prompt 'Please enter the codename!'
If ($NewName -in ('Candy', 'Sugar', 'Lollipop') ) { echo 'The code you entered is not available.'}
PS C:\> $NewName = Read-host -Prompt 'Please enter the codename!'
>> If ($NewName -in ('Candy', 'Sugar', 'Lollipop') ) { echo 'The code you entered is not available.'}
Please enter the codename!: Candy
The code you entered is not available.
PS C:\>
Benötigen Sie eine echte Umgebungsvariable?
$NewName = Read-host -Prompt 'Please enter the codename!'
If ($NewName -in ('Candy', 'Sugar', 'Lollipop') ) {
echo 'The code you entered is not available.'
}
Else {$env:CodeName = $NewName} # only exists within scope of procesd
or
Else {[Environment]::SetEnvironmentVariable("CodeName", $NewName, "User")} # Persistant at user-level
or (Requires Admin PowerShell Console. Not avaiable to creating process.)
Else {[Environment]::SetEnvironmentVariable("CodeName", $NewName, "Machine")} # Persistant at machine-level