2015-06-14 296 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函數。再次感謝。 –