2017-09-25 86 views
2

我正在为局域网联网计算机批量制作聊天风格系统。 我想检查用户名是否被采用,如果不允许它被选中,我如何检查用户在这一行输入的内容(set/p name2 =) 我已经在测试中试过了文件,但不能得到它的工作检查用户输入是否在txt文件中,批次为

: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部分命令,所以我可以指定到哪儿去......

上面的代码块是什么,我需要^^^

帮助下的东西是什么,我目前使用和它的作品只是没有名称验证。

下面是使用名称的选择是不工作的名义验证

: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内部看起来,如果:如果是正确

username1 
username2 
username3 
username4 

跑@@@@@@@@@@新的编辑在这里吹@@@@@@@@@@@@@@@@@@@@@@

所有固定和工作我用%user2%在文本文件和%name2%在主文件中,所以难怪他们不一起工作。还是不明白FINDSTR,但...这就是为什么你不以低睡眠凌晨1时写任何形式的代码我猜:)

+0

这将是明智的,提供您'Users.twml'文件的例子,因为它表明类似XML的标记语言。 – Compo

+0

添加的文件的外观,它只是由一批行添加到文件>>%twml%回声%用户2% –

回答

2

你已经糊涂了||&&(我也这样做,这就是为什么我从来没有使用它们)

&&的意思是“如果成功”,即errorlevel0||意味着相反。

findstr将“成功”,如果目标字符串找到。 (嗯,你肯定不希望/i - 和/b /e相当于/x)如果修复||&&然后

- 好吧,也许found而不是fail ...

您的代码仍然无法工作,因为您在文件中记录的数据前面会有一个空格。一旦echo行中的任何字符,重定向和目标定义被删除,而不是第一个空格被重定向到该文件。您的代码是

echo 
space 
redirection specifier including filename 
space 
%user2% 

因此,去除重定向串和第一空间叶空间%用户2%

修复使用

>> %twml% echo %user2% 

redirection specifier including filename 
space 
echo 
space 
%user2% 

的第一个空间将重定向巫术与分开指令,第二个将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 

正常工作对我!

+0

我解决了添加您的巫毒招users.twml的空间,但我FINDSTR的主要问题仍无法正常工作权仍然存在 –

+0

我报废FINDSTR只使用发现,它的工作,但我得到了另一个问题,现在您的巫毒招,或许你知道为什么,上面贴我是在测试工作的新的解决方案,但不是生产文件 –

+0

发现哪里ECHO关闭。来自它是由%user2%之前的回声造成的:使用:>> Users.twml回声。 %user2%但%user2%没有保存到users.twml文件,它只是将空行保存为echo。在cmd中打印出来(空行) –

相关问题