Использование SET в if exist

Использование SET в if exist
 set /p codename="Please enter the codename! "

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

Если пользователь вводит %codename% как Candy, Sugar или Lollipop и т. д., есть ли способ заставить echo сказать «Введенный вами код недоступен», а затем приостановить bat?

Если пользователь введет что-либо еще, кроме этих трех, скрипт продолжит работу.

Как я могу это сделать?

решение1

Вы можете использовать несколько строк для проверки ввода пользователя с помощьюfindstr:

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

1)echo/%codename%(строка-ввод) вfindstr(найти строку),

2) Использовать/i без учета регистраесли нужно, если нет, удалите/i

3) Если совпадает,goto :nextметка... если нет, выполнит следующую строку...

4) Эхо/ваше сообщение и тайм-аут отображаются для пользователя, ожидая, пока пользователь нажмет любую клавишу

5)goto :EOF(конец файла), то же самое, что и выход/прерывание/завершение работы 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...`

  • Наблюд.Если пользовательский ввод только ввод, вы можете ограничить это: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...

решение2

Если существует - это неправильная форма сравнения для переменного содержимого. Правильная форма будет:

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

Если одну и ту же команду необходимо выполнить для любого заданного допустимого значения, можно использовать цикл for следующим образом:

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

Как функция в конце вашего скрипта

:CodeTrue
Pause
Rem other commands
Exit /b

решение3

Если вы можете перейти на 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:\>  

Вам нужна настоящая переменная среды?

$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

Связанный контент