2012-09-28 54 views
0
for /f "tokens=3" %%f in ('find /c /i "apples" "test.txt"') do set varMWG=%%f 
REM echo %varMWG% 

if %varMWG% EQU 1 (
    @echo TRUE 
) else (
    @echo FALSE 
) 

而不是回顯TRUE或FALSE如果找到字符串,我想回顯變量行,如果找不到它,仍然回顯FALSE。DOS如果發現FINSTR設置變量爲該行,然後回顯變量?

的test.txt包含

fdgsdf 
hgsfrtgyr 
apples 
fdsgfghs 
erwyuweu 

回答

1

如果所有你需要的是呼應匹配或呼應如果沒有線匹配FALSE,該線(換句話說,你不需要的變量),然後

findstr /ilc:"apples" "test.txt" || echo FALSE 

請記住,有可能是符合搜索條件的多條線路。

如果需要包含的最後一行找到一個變量,則:

set "varMWG=" 
for /f "delims=" %%S in ('findstr /ilc:"apples" "test.txt"') do set "varMWG=%%S" 
if defined varMWG (echo %varMWG%) else echo FALSE 

注 - 延遲膨脹會更安全。根據varMWG的內容,使用常規擴展的ECHO可能會失敗。

如果您需要包含第一個找到的行變量,則:

set "varMWG=" 
for /f "delims=" %%S in ('findstr /ilc:"apples" "test.txt"') do (
    set "varMWG=%%S" 
    echo %%S 
    goto :break 
) 
:break 
if not defined varMWG echo FALSE 

最後一個選項,就永遠需要延遲擴展。

0

如果 「呼應變量行」 你的意思是呼應搜索字符串 「蘋果」,然後將下面的代碼就足夠了:

@echo off 
for /f "tokens=* delims= " %%f in (test.txt) do (
if %%f EQU apples (echo %%f 
) else echo false 
) 

輸出:

false 
false 
apples 
false 
false 
+1

我相信像「青蘋果酸」這樣的行也應該匹配。你的代碼當然不會那樣工作。另外,如果在文件的任何位置找不到搜索字符串,我認爲OP只需要1 FALSE行。與線 – dbenham

+0

@dbenham輸出測試 「青蘋果是酸的」 在test.txt的結尾: 'FALSE' 'FALSE' 'apples' 'FALSE' 'FALSE' 'FALSE' –

+1

是的,我相信正確的答案應該是用完整的綠蘋果詞組代替最後的錯誤。 – dbenham

相關問題