
set /p codename="Please enter the codename! "
if exist %codename% = Candy, Sugar, Lollipop (
echo The code you entered is not available.
)
Se o usuário inserir% codename% como Candy, Sugar ou Lollipop etc. Existe uma maneira de fazer o eco dizer "O código que você digitou não está disponível" e depois pausar o bastão?
Se o usuário inserir qualquer outra coisa exceto esses três, o script continuará funcionando.
Como posso fazer isso?
Responder1
Você pode usar várias strings para validar a entrada do usuário comfindstr
:
echo/%codename% |%__APPDIR__%findstr.exe "Candy Sugar Lollipop" >nul && goto :Next
1)echo/%codename%
(entrada de string) parafindstr
(encontrar string),
2) Usar/i
sem distinção entre maiúsculas e minúsculasse precisar, se não, remova/i
3) Se combinado,goto :next
rótulo... se não, executará a próxima linha...
4) Faça eco/sua mensagem e um tempo limite aparece para o usuário, aguardando que o usuário pressione qualquer tecla
5)goto :EOF
(fim do arquivo), o mesmo que sair/abortar/sair do seu bastão.
@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.Se apenas a entrada do usuário for inserida, você poderá limitar isso em:
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...
Responder2
Se existir é a forma errada de comparação para conteúdo variável. A forma correta seria:
If "%variable%"=="desired value" (command)
Se o mesmo comando for executado em qualquer valor permitido, você pode usar um loop for como este:
For %%A In (Candy,Sugar,Lollipop) Do (
If /I "%codename%"=="%%A" (
Call :CodeTrue
)
)
Como uma função no final do seu script
:CodeTrue
Pause
Rem other commands
Exit /b
Responder3
Se você puder mudar para o 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:\>
Você precisa de uma variável ambiental verdadeira?
$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