2017-09-25 3 views
0

Je crée un système de style de discussion pour les ordinateurs en réseau LAN, et je veux vérifier si le nom d'utilisateur est utilisé ou non. Je ne peux pas le faire fonctionner bien, voici ce que j'ai dans un fichier de test, qui fonctionne ...Batch - vérifier si l'entrée de l'utilisateur est dans un fichier texte puis continuer

@echo off 
title Testing usercheck 

setlocal EnableDelayedExpansion 

set "user2=" 
set /p "user2=" 
find /c "%user2%" Users.twml 
if %errorlevel% equ 1 goto yes 
goto nope 


:empty 
cls 
echo empty response, should not be triggered... 
pause 
goto end 


:yes 
cls 
echo yes, you can use that 
>> Users.twml echo %user2% 
pause 
goto end 


:nope 
cls 
echo nope. that is taken... try again! 
pause 
goto end 


:end 
cls 
echo. 
echo End of testing file... 
echo. 
echo press any key to exit 
pause>nul 
exit 

Cela prend l'entrée d'utilisateur, vérifie le fichier pour voir si elle est là-dedans, si Il est, dit-il, ne peut pas utiliser, si ce n'est pas là, il dit peut utiliser et enregistre le nom dans le fichier texte afin que d'autres ne peuvent pas choisir le même. Cependant, quand je l'ai mis dans mon dossier principal qui im ​​faire la même chose ne fonctionne pas, lors de l'enregistrement du nom de fichier des enregistrements de fichiers

ECHO is off. 

causé par cette ligne ici

>> Users.twml echo %user2% 

et non la Nom d'utilisateur que l'utilisateur a entré, Curieusement, bien que cela fonctionne dans le fichier de test parfaitement, voici la section de mon fichier principal qui ne fonctionne pas.

@echo off 
title Batch Chat Room 
mode con: cols=83 lines=10 

setlocal EnableDelayedExpansion 


:startup 
cls 
echo Pick A UserName 
echo 1-16 Character limit. 
set "user2=" 
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 
find /c "%user2%" Users.twml 
if %errorlevel% equ 1 goto conta 
goto tryagaina 


:conta 
cls 
echo yes, you can use that 
>> Users.twml echo %user2% 
pause 
:: This pause is just for testing to add a wait here 
copy /y NUL Connected.twml >NUL 
copy /y NUL Directory.twml >NUL 
attrib +h Connected.twml 
attrib +h Directory.twml 
cls 
>> Connected.twml echo [System] %computername%:%username% Has joined as: %name2% 
>> Directory.twml echo [System] %name2% Has joined the chat. 
title Lightfoot Web - Batch ChatRoom - (User Typing) - (Username:%name2%) 
goto A 


:tryagaina 
goto startup 

est ici à l'intérieur de Users.twml 2 premières lignes ont été écrites par le fichier de test, les autres par mon dossier principal.

twml 
bob 
ECHO is off. 
ECHO is off. 
ECHO is off. 

Au début, je l'ai essayé findstr, mais n'a pas pu le faire fonctionner, donc j'utilisé errorlevel comme je ne sais comment ça fonctionne très bien. mais il ne sera pas enregistrer le nom de fichier en utilisant mon fichier principal. Je suis bloqué avec ceci parce que les lignes pour Connected.twml et Directory.twml écrivent leur contenu, juste Users.twml ne le fera pas.

+1

Je vote pour fermer cette question hors sujet, car il est un [existant question par le même membre] (https://stackoverflow.com/q/46396536/6738015). – Compo

+0

TBG 1500, s'il vous plaît ne pas essayer de fermer votre propre question afin de le demander à nouveau, surtout sans relier l'original et les réponses. – Compo

Répondre

0

Répondu! J'ai utilisé% name2% dans mon fichier principal et% user2% dans le fichier de test, donc bien sûr les parties ne fonctionneront pas ensemble, elles ne sont pas la même variable. Duh ...

Voici le code fixe:

:startup 
cls 
echo Pick A UserName 
echo 1-16 Character limit. 
set "name2=" 
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 
find /c "%name2%" Users.twml 
if %errorlevel% equ 1 goto conta 
goto tryagaina 


:conta 
cls 
echo yes, you can use that 
>> Users.twml echo %name2% 
pause 
:: This pause is just for testing to add a wait here 
copy /y NUL Connected.twml >NUL 
copy /y NUL Directory.twml >NUL 
attrib +h Connected.twml 
attrib +h Directory.twml 
attrib +h Users.twml 
cls 
>> Connected.twml echo [System] %computername%:%username% Has joined as: %name2% 
>> Directory.twml echo [System] %name2% Has joined the chat. 
title Batch Chat Room (Username:%name2%) 
goto A 


:tryagain 
goto startup 

cela fonctionne maintenant, l'affaire est close :)