
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 :next
etiqueta... 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