2017-09-25 10 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 

走っ@@@@@@@@@@新編集@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

私はテキストファイルで%user2%、メインファイルで%name2%を使用していましたので、一緒に作業しても不思議ではありません。まだfindstrを理解していない...これは、あなたが低い睡眠と1amでコードの任意のフォームを書くことはありません:)

+0

あなたの 'Users.twml'ファイルの例は、XMLに似たマークアップ言語を示唆しているので、それが賢明でしょう。 – Compo

+0

ファイルの見た目を追加しました。バッチラインでファイルに追加されました。>>%twml%echo%user2% –

答えて

2

あなたは||&&を混乱させました。 )

&&は、「成功した場合」つまりerrorlevel0であることを意味します。 ||は反対を意味します。

findstrは、ターゲット文字列である場合、「成功」します。 (ええと、あなたは/iをしたくない - と/b /e/xに相当します)あなたは&&||を修正した場合

- だけでなく、おそらくfoundむしろfail ...

しかし

よりファイルに記録しているデータの前にスペースがあるため、コードはまだ機能しません。 echo行の文字は、リダイレクトとターゲット定義が最初のスペース以外で削除されるとファイルにリダイレクトされます。あなたのコードはそう、リダイレクト文字列と最初のスペースを削除すると

redirection specifier including filename 
space 
echo 
space 
%user2% 

すなわち

>> %twml% echo %user2% 

を使用し修正するスペース%user2の%の

を残し

echo 
space 
redirection specifier including filename 
space 
%user2% 

です最初のスペースは、リダイレクトブードーをから分離します命令であり、2番目の命令は必要な文字列から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を廃止してfindを使用しても動作しますが、私はあなたのブードートリックに別の問題があります。なぜか、なぜ上に投稿されたのが、テストではなくプロダクションファイルではないという新しいソリューションです –

+0

エコーはオフです。それは%user2%の前にエコーによって引き起こされたからです:>> Users.twml echo。 %user2%が%user2%はusers.twmlファイルに保存されていないので、空白の行はechoと同じように保存されます。 cmd(空白行)でプリントアウト –

関連する問題