Как проверить, есть ли вход в списке - Пакет - PullRequest
2 голосов
/ 01 ноября 2019

Делаем это в Windows Batch. У меня есть список имен и прошу пользователя ввести их имя. Я хочу проверить, существует ли это имя в списке, если это так, то оно идет прямо к goto, иначе оно добавит имя в список.

@echo off
set "list=Bob,Steve,Harry"

set /p "name=What is your name?"
for /f "tokens=3 delims=," %%i in ("%list%") do (
    if %%i=="%name%" (
        goto nameInList
    )
)
set "list=%list%,%name%"

:nameInList
... some code here ...

Я осмотрелсяи нашел способ сравнения только в том случае, если в файле есть строка, в которую я попал и отредактировал for /f "tokens=3 delims=," %%i in (%list%) do, но он все еще пытается найти файл "list".

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 01 ноября 2019

Я не уверен, что вы подразумеваете под обновлением списка. Если вы хотите постоянно обновлять список в самом пакетном файле, вам нужно прояснить это, чтобы я мог обновить ответ. Сейчас я предполагаю, что вы просто хотите временно обновить переменную списка:

@echo off
set "list=Bob,Steve,Harry"
set /p name=Enter your name:
echo %list% |findstr /i "\<%name%\>" >nul 2>&1
if %errorlevel% equ 1 goto add
echo %name% already in list
goto :eof
:add
set "list=%list%,%name%"
echo %list%

Однако вы можете также добавить все имена в отдельный файл. Например:

names.txt

Bob
Steve
Harry

Затем пакетный файл:

@echo off
set /p "name=Enter your name: "
for /f "delims=" %%i in ('type names.txt ^| findstr /i "\<%name%\>"') do if /i "%%~i"=="%name%" (
   echo %name% already in list && goto :eof
)
:add
echo %name%>>names.txt
echo %name% added to names.txt && set name=

Это будет проверять каждое значение в спискеимена внутри names.txt, и если совпадений не найдено, имя будет добавлено в файл.

1 голос
/ 01 ноября 2019

Вы можете использовать подстроку подстановки , чтобы узнать, содержится ли элемент в списке, например:

set "list=Bob,Steve,Harry"
set /p "name=What is your name?"

rem // Augment list with surrounding commas:
set "test=,%list%,"
rem // Try to remove item (name) from augmented list:
call set "test=%%test:,%name%,=,%%"

rem // Compare result with augmented list:
if not ",%list%,"=="%test%" (
    echo Name is already in list!
) else (
    if defined list (set "list=%list%,%name%") else (set "list=%name%")
    echo Name has been added to list.
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...