2015-11-05 89 views
0

我正在循環目錄名稱列表,並試圖找出某個目錄是否具有某些文本。命令行檢查一個字符串變量是否包含特定文本

這是我的CMD行代碼:

FOR %%a in (%%c) do (
    echo.%%a|findstr /C:"Plugin" >nul 2>&1 
    if not errorlevel 1 (
     echo Found 
    ) else (
     echo Not found. 
    ) 
    ) 

它實際上似乎工作,但隨後它結束後,將其與代碼1.退出我有輸出窗口構建集診斷,但我不看到錯誤的任何解釋。尋找一些指導,或者更好的方法來做本質上的事情,即%%a.Contains("Plugin")

+0

set variable = chuck_lori&set findthis = lori&echo%variable%| findstr/C:%findthis%&If%ERRORLEVEL%EQU 0 echo字符串%變量%包含%findthis%----這將回顯: chuck_lori 字符串chuck_lori包含lori –

+0

所以我認爲我的語法是錯誤的。你可以告訴我,上面的變量會是什麼樣子。 %% a具有我需要檢查的目錄名稱字符串。 –

+0

我沒有得到你爲什麼使用%% a ..不應該是%a%(如果變量a在循環中一個接一個地存儲每個文件夾的值)並且%c%是變量目錄/目錄樹列表。做一個簡單的檢查,如:set foldername = i_want_to_find_this_folder_name&set find_this_name = folder_name&echo%foldername%| findstr/C:%find_this_name%...並查看%ERRORLEVEL%值是什麼。 –

回答

1

你的循環保持文件夾已被發現,這意味着在過去的文件執行的findstr未能通過測試,並設置錯誤級別爲1

但是,如果沒有文件存在這種代碼也可能失敗之後迭代,因爲do子句不會被執行,因此findstr不會設置錯誤級別。

如果需要for結構(不知道,缺碼)

for %%c in ..... do (
    FOR %%a in (%%c) do (
     echo.%%a|findstr /C:"Plugin" >nul 2>&1 
     if not errorlevel 1 (
      echo Found 
      exit /b 0 
     ) 
    ) 
) 
echo Not found 
exit /b 1 

,或者你可以用

(>nul 2>&1 dir /s *plugin*) && echo found || echo not found 

嘗試將使用dir命令來檢查匹配的文件(並設置錯誤級別,如果不存在)並使用條件運算符來顯示文本

+0

我想退出殺死整個循環。但是我會有多個名稱中包含「Plugin」的目錄,我需要對它們中的每一個都做些什麼。在我的第二個For循環中有沒有可用的不同語法? –

+0

因此,如果我在If Not語句中沒有退出,那麼只要獲取我需要的所有文件夾,它就可以正常工作。但是最後它會以錯誤1退出。我能以某種方式阻止嗎? –

相關問題