【发布时间】:2017-09-26 00:59:36
【问题描述】:
我正在为局域网联网的计算机批量制作聊天风格系统。 我想检查用户名是否被使用,如果它不允许被选择,我如何检查用户在这一行中输入的内容(set /p name2=) 我已经在测试文件中尝试过这个,但无法让它工作
:startup
set "fail="
set "name2="
set /p "name2=Enter Your Username: "
cls
findstr /b /e /l /c:"%name2%" <"Users.twml" >nul || set fail=1
if defined fail (
goto nope
)
:yes
cls
echo yes, you can use that
echo >> Users.twml %name2%
pause
goto endoftest
:nope
cls
echo thats taken try again
ping locahost -n 3 >nul
goto startup
问题是它总是失败,即使名字没有被占用。创建了 Users.twml 文件,如果我手动输入 :Yes 在用户选择名称后它将加载的位置,它将名称保存到文件中。
我想要的是:用户选择名称,它检查它是否在文件中(被占用),如果是,则使用 goto 启动重试,如果没有被占用,则将其写入文件并继续。最好使用 goto section 命令,这样我就可以指定去哪里...
上面的代码块是我需要帮助的^^^
下面的东西是我目前使用的,它只是没有名称验证。
这是我目前拥有的用于名称选择的块,无需名称验证即可工作
:startup
cls
echo Pick A UserName
echo 1-16 Character limit.
set /p name2=
if "!name2!" == "" goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if not "!name2:~16!" == "" goto over
REM continues on after name picked if matches above requirements with stuff below
echo >> Connected.twml [System] %computername%:%username% Has joined as: %name2%
echo >> Directory.twml [System] %name2% Has joined the chat.
goto chat
这就是我试图为您提供视觉创意的目的。 而且目前不起作用
:startup
cls
echo Pick A UserName
echo 1-16 Character limit.
set "fail="
set /p name2=
if "!name2!" == "" goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if "!name2!" == " " goto startup
if not "!name2:~16!" == "" goto over
REM all the above works, now lets try to check if its taken
findstr /b /e /l /c:"%name2%" <"Users.twml" >nul || set fail=1
if defined fail (
goto nope
)
REM continues on after name picked if matches above requirements with stuff below
echo >> Connected.twml [System] %computername%:%username% Has joined as: %name2%
echo >> Directory.twml [System] %name2% Has joined the chat.
echo >> Users.twml %name2%
goto chat
:nope
cls
echo thats taken try again
ping locahost -n 3 >nul
goto startup
这就是 users.twml 内部的外观如果 :yes 如果运行正确
username1
username2
username3
username4
@@@@@@@@@@这里有新的编辑@@@@@@@@@@@@@@@@@
所有固定和工作我在文本文件中使用 %user2% 并在主文件中使用 %name2% 所以难怪他们不一起工作。虽然仍然不明白 findstr ......这就是为什么你不写任何形式的代码在凌晨 1 点睡眠不足我猜 :)
【问题讨论】:
-
最好提供
Users.twml文件的示例,因为它建议使用类似于 XML 的标记语言。 -
添加了文件的外观,它只是通过批处理行添加到文件中>> %twml% echo %user2%
标签: batch-file findstr