Usando un SET en si existe

Usando un SET en si existe
 set /p codename="Please enter the codename! "

 if exist %codename% = Candy, Sugar, Lollipop (
    echo The code you entered is not available.
 )

Si el usuario ingresa %codename% como Candy, Sugar o Lollipop, etc. ¿Hay alguna manera de hacer que el eco diga "El código que ingresaste no está disponible" y luego pausar el bate?

Si el usuario ingresa algo más que estos tres, el script seguirá funcionando.

¿Cómo puedo hacer esto?

Respuesta1

Puede utilizar varias cadenas para validar la entrada del usuario confindstr:

echo/%codename% |%__APPDIR__%findstr.exe "Candy Sugar Lollipop" >nul && goto :Next

1)echo/%codename%(entrada de cadena) afindstr(buscar cadena),

2) uso/i no distingue entre mayúsculas y minúsculassi es necesario, si no, eliminar/i

3) Si coincide,goto :nextetiqueta... si no, ejecutará la siguiente línea...

4) Se muestra al usuario eco/su mensaje y un tiempo de espera, esperando a que presione cualquier tecla

5)goto :EOF(fin del archivo), lo mismo que salir/abortar/salir de tu bat.


@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.Si solo ingresa la entrada del usuario, puede limitar esto en: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...

Respuesta2

Si existe es la forma incorrecta de comparación para contenido variable. La forma correcta sería:

If "%variable%"=="desired value" (command)

Si se va a ejecutar el mismo comando en cualquier valor permitido determinado, puede utilizar un bucle for como este:

    For %%A In (Candy,Sugar,Lollipop) Do (
        If  /I "%codename%"=="%%A" (
            Call :CodeTrue
        )
    )

Como una función al final de tu script

:CodeTrue
Pause
Rem other commands
Exit /b

Respuesta3

Si puede pasar a PowerShell:

$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:\>  

¿Necesita una verdadera variable ambiental?

$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

información relacionada