windows - Kontroller, at brugerindgang er et af flere tilladte ord

Indlæg af Hanne Mølgaard Plasc

Problem



Så jeg har problemer med denne kodekode, som er beregnet til at kontrollere, om brugerindgangen stemmer overens med de givne muligheder.


set /p "myVar=---> " 
echo \%myVar\%|findstr /ix "red:Red:blue:Blue">nul && ( 
 echo \%myVar\% matched 
 ) || ( 
 echo \%myVar\% not matched 
 ) 


Er der en måde, jeg kan gøre det som ovenfor eller på anden måde?

Bedste reference




Du kan gøre brug af det faktum, at for /F returnerer en exitkode på 1 i tilfælde af nul iterationer:


set /P VAR="Enter something: " || ((echo Empty input!) & exit /B)
(for /F "delims=AaEeIiOoUuYy eol=y" \%\%K in ("\%VAR\%") do rem/) && (
    echo No match found!
) || (
    echo Match encountered.
)


Hvis indtastningen kun består af tegn, der er opført efter delims=, gentager for /F sløjfen ikke og returnerer en exitkode på 1; kommandoen bag && udføres kun, hvis udgangskoden er 0, udføres kommandoen bag || kun, hvis exitkode ikke er 0.
Hvis der ikke er angivet input, indstilles set /P exitkode til 1.

Andre referencer 1


Her er et grundlæggende eksempel på, hvad du vil gøre. Jeg har ikke testet i DOS, da jeg ikke har nogen VM (eller meget gammel computer) her, men IIRC dette burde også fungere i almindelig DOS.


@echo off
if \%var\% == A GOTO :anything
if \%var\% == E GOTO :anything
if \%var\% == I GOTO :anything
if \%var\% == O GOTO :anything
if \%var\% == U GOTO :anything
if \%var\% == Y GOTO :anything
goto end
:anything
echo anything
:end

Andre referencer 2


Jeg tror, ​​choice er din bedste ven her. Men hvis du vil gøre det uden choice (det er ikke tilgængeligt i alle Windows-versioner):


set /p "myVar=---> "
echo \%myVar\%|findstr /ix "a e i o u y">nul && (
  echo \%myVar\% matched
) || (
  echo \%myVar\% not matched
)


Den beder om input og kontrollerer, om det er nøjagtigt et af tegnene fra listen, ignorerer aktivering.