我正在为局域网联网计算机批量制作聊天方式系统。 我想检查是否使用了用户名,如果不允许它被选中,我如何检查用户在此行中输入的内容(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文件已创建,如果我手动放置:是,在用户选择名称后将加载它将名称保存到文件。
我想要的是:用户选择名称,它检查它是否在文件中(如果是)重试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点睡眠不足我想:)
答案 0 :(得分:2)
您已经混淆了||
和&&
(我也这样做了,这就是我从不使用它们的原因)
&&
表示&#34;如果成功&#34;即,errorlevel
是0
。 ||
意味着相反。
findstr
将&#34;成功&#34;如果找到目标字符串 。 (嗯,确定你不想要/i
- 而/b /e
相当于/x
)
如果您将||
修改为&&
,那么 - 好吧,也许found
而不是fail
......
BUT
您的代码仍然无效,因为您在文件中录制的数据前面会有空格。 echo
行中的任何字符,一旦移除重定向和目标定义而不是第一个空格,将被重定向到该文件。你的代码是
echo
space
redirection specifier including filename
space
%user2%
所以,删除重定向字符串和第一个空格会离开 Space %user2%
修复使用
>> %twml% echo %user2%
即
redirection specifier including filename
space
echo
space
%user2%
第一个空格将重定向伏都教与echo
指令分开,第二个空格将echo
与所需字符串分开。
这是我的测试设置,使用您的原始方法,cls
,删除延迟并使用对我的系统来说方便的文件
@ECHO Off
SETLOCAL
:startup
SET "twml=u:\users.twml"
set "fail="
set "user2="
set /p "user2=Enter Your Username: "
REM cls
IF NOT DEFINED user2 GOTO :EOF
findstr /X /l /c:"%user2%" <"%twml%" >nul && set fail=1
if defined fail (
goto nope
)
:yes
REM cls
echo yes, you can use that
>> %twml% echo %user2%
goto :eof
:nope
REM cls
echo thats taken try again
:: ping locahost -n 3 >nul
goto startup
GOTO :EOF
对我来说很好用!