2017-09-25 2 views
2

LAN 네트워크 컴퓨터에 대해 일괄 적으로 채팅 스타일 시스템을 만들고 있습니다. 사용자 이름을 가져 왔는지 여부를 확인하고 선택을 허용하지 않는 경우 사용자가이 줄에 입력 한 내용 (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 시작으로 다시 시도하고, 실행하지 않으면 다시 파일에 쓰고 계속 진행합니다. 바람직하게는 고토 섹션 명령 그래서 내가 가고 위치를 지정할 수 있습니다 ... 아니

위의 코드 블록은 내가 아래의 물건은 내가 현재 무엇을 사용 ^^^

도움이 필요하고 그냥 작동 이름 확인. 여기

이 내가 당신에게 시각적 아이디어를 제공하는 이동하기 위해 노력하고있어 무엇 실명 인증

: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 

실행 @@@@@@@@@@ 새로운 편집 [email protected]@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

텍스트 파일에서 % user2 %와 주 파일에서 % name2 %를 사용했기 때문에 모두 함께 작동하지 않습니다. 아직도 findstr을 이해하지 못합니다 ... 이것은 왜 당신이 낮은 수면과 함께 1am에 어떤 형태로든 코드를 작성하지 않습니다. :)

+0

XML과 유사한 마크 업 언어를 제안하므로 'Users.twml' 파일의 예제를 제공하는 것이 좋습니다. – Compo

+0

파일이 어떻게 보이는지 추가했습니다. 배치 라인별로 파일에 추가되었습니다. >> % twml % echo % user2 % –

답변

2

||&&을 혼란스럽게 생각합니다.)

&&은 "성공한 경우"즉 errorlevel0 인 것을 의미합니다. ||은 반대를 의미합니다.

findstr 대상 문자열 인 경우 "succeed"됩니다. ... 아마도 잘

하지만

found보다는 fail을 - (음, 확실히 당신은 /i 싶지 않아 - 그리고 /b /e/x에 해당) 그런 다음 ||-&&를 해결하는 경우

파일에 기록중인 데이터 앞에는 공백이 오기 때문에 코드가 작동하지 않습니다. echo 행에있는 모든 문자 (첫 x 째 공백 이외의 경로 재 지정 W 목표 정의가 제거되면 파일로 재 지정됩니다).코드는 사용자 2의 %가

해결하기 위해 공간 % 사용 잎 리디렉션 문자열과 최초의 공간을 제거, 그래서

echo 
space 
redirection specifier including filename 
space 
%user2% 

입니다

>> %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

인 곳이다. 에코는 꺼져 있습니다. 그것은 % user2 %를 사용하기 전에 echo로 인해 발생했습니다 : >> Users.twml echo. % user2 %하지만 % user2 %는 에코처럼 빈 줄을 저장하는 users.twml 파일에 저장하지 않습니다. cmd (공백 라인) –

관련 문제