2015-06-14 269 views
0

所以,我在批处理脚本中编程,并且遇到了这个问题。以下代码将采用yourwords.txt文件并解析它。变量existedWord将具有文本文件的最后一个字。所以,每次运行这个程序时,它只会将用户的输入与文本文件中的最后一个字进行比较,但我希望它从开始处进行比较,并且如果该文字存在于文本文件中,那么只需将消息显示为“重复字”。如果该文字不在文本文件中,则将其添加到.txt文件并将消息显示为“这是一个新词”。使用批处理脚本逐行解析文本文件(批处理文件)

.txt文件每行包含文字。例如,

apple 
banana 
cat 
dog 
elephant 
fish 
gone 
home 
ignorant 

注意:此文本文件中的单词数可能为几百。

我的目标是比较此文本文件中的每个单词,并查看用户输入是否与.txt文件中存在的单词匹配。

@echo off 

:START 
cls 
echo. 
echo Enter a word: 
set /p "cho=->" 
for /F "tokens=*" %%A in (yourwords.txt) do (set existedWord=%%A) 
if /I %cho%==%existedWord% (goto REPEATEDWORD) 
echo %cho% >> yourwords.txt 
) 

:SUCCESSFUL 
echo. 
echo That is a new word. 
Ping -n 5 Localhost >nul 
goto START 

:REPEATEDWORD 
echo. 
echo Sorry! that word is repeated word. 
echo. 
pause 
goto START 
+0

有没有想过用这个find?查找可以忽略大小写,但它也可以找到部分单词。所以如果有人只输入“e”,并且你检查你的列表文件并找到它,它会在“apple”中找到“e”。但如果这不关心你发现是一个优雅的方式来做到这一点。 – Marged

回答

1

您不需要逐行解析文件。

@echo off 
:START 
cls 
echo. 
set /p "cho=Enter a word: -> " 
findstr /i "\<%cho%\>" yourwords.txt >nul 2>&1 
if %errorlevel%==0 (
    echo. 
    echo Sorry! that word is repeated word. 
    echo. 
) else ( 
echo. 
    echo That is a new word. 
    echo %cho%>>yourwords.txt 
    Ping -n 5 Localhost >nul 
) 
goto START 
+0

谢谢。这真的很好。我不知道有一个FINESTR函数。再次感谢。 –