windows - 如何检查输入是否已在列表中-批处理

标签 windows list batch-file

在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变量:

@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内的名称列表中的每个值,如果找不到匹配项,它将把名称附加到文件中。

关于windows - 如何检查输入是否已在列表中-批处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58652567/

相关文章:

windows - 检查与服务器应用程序的连接

c# - 从 "select mode"获取控制台窗口以防止崩溃

java - 如何在 Java 中的列表上获得反向 ListView ?

Windows 批量输出

java - 使用 Bat 文件启动 Java 应用程序(如果尚未启动)

batch-file - 将文件读入数组并写出 block

c++ - 返回对类静态数据成员的引用的正确方法是什么? (我正在使用 Qt,以防它有所作为)

c - Netbeans无法编译C

python - 使用元组作为 json.dump 嵌套属性的键

c - 我在 C 中使用指针时遇到问题