假設我在一個名爲$ 1的變量中有一些文本。現在我想檢查$ 1是否包含某個字符串。如果它包含某個字符串,我想打印一條消息。印刷不是問題,問題是檢查...想法如何做到這一點?檢查批處理文件(Windows)中子字符串的字符串?
回答
據我所知cmd.exe沒有內置函數直接回答你的問題。但它支持替換操作。所以訣竅是:在你的$ 1中替換你需要用一個空字符串測試存在的子串,然後檢查$ 1是否已經改變。如果它有那麼包含子字符串(否則替換操作本來沒有什麼可替代的!)。請參見下面的代碼:
set longString=the variable contating (or not containing) some text
@rem replace xxxxxx with the string you are looking for
set tempStr=%longString:xxxxxx=%
if "%longString%"=="%tempStr%" goto notFound
echo Substring found!
goto end
:notFound
echo Substring not found
:end
注 - 此類搜索不區分大小寫。也可以有特殊字符的問題。在搜索/替換和相等性檢查中使用延遲擴展時,它更加健壯。但搜索字符串不能包含'='char,搜索字符串不能以'〜'或'*'開頭。 – dbenham 2012-01-06 13:02:23
@dbenham:絕對公平的評論,我的解決方案遠非完美(儘管是cmd語法)。 – 2012-01-06 13:16:38
所設置的搜索在很多情況下取代招的作品,但它不支持區分大小寫正則表達式搜索。
如果您需要區分大小寫的搜索或有限的正則表達式支持,可以使用FINDSTR。
爲避免轉義特殊字符的複雜性,最好是如果搜索字符串在變量中,並且搜索和目標都通過延遲擴展來訪問。
您可以使用ECHO命令將$ 1傳入FINDSTR命令。如果$ 1未定義,請使用ECHO(
,注意不要添加額外的空格。如果未定義$ 1,則ECHO !$1!
將回顯ECHO is off.
(或打開),而如果未定義,則ECHO(!$1!
將回顯空行。
如果FINDSTR發現搜索字符串,它將回顯$ 1 - 您不希望這樣會將輸出重定向到nul。如果找到搜索字符串,則FINDSTR將ERRORLEVEL設置爲0;如果未找到,則FINDSTR設置爲1。這是用來檢查字符串是否被找到。 &&
和||
是用於測試匹配(ERRORLEVEL 0)或不匹配(ERRORLEVEL不是0)的便捷語法。
正則表達式支持是基本的,但仍然有用。
查看FINDSTR /?獲取更多信息。
此正則表達式示例將在字符串開始處搜索「BEGIN」$ 1,中間任何位置的「MID」和結束處的「END」。搜索默認情況下區分大小寫。
set "search=^BEGIN.*MID.*END$"
setlocal enableDelayedExpansion
echo(!$1!|findstr /r /c:"!search!" >nul && (
echo FOUND
rem any commands can go here
) || (
echo NOT FOUND
rem any commands can go here
)
在我看來,最簡單的方法是這樣的:
set YourString=This is a test
If NOT "%YourString%"=="%YourString:test=%" (
echo Yes
) else (
echo No
)
Basiclly後的字符串「:」是字符串您正在尋找與您正在使用不盈方如果因爲%字符串: * %將從字符串中刪除*使它們不相等。
與[Igor的回答](http://stackoverflow.com/a/8757658/1012053)一樣,這個測試忽略了大小寫。此外,使用延遲擴展更安全。最後,如果子字符串包含'=',則不能使用它。 – dbenham 2015-07-30 14:52:08
- 1. 批處理文件在字符串中找到子字符串
- 2. 批處理文件在字符串中查找字符串
- 3. Windows批處理:在文件中查找字符串中帶有「[」的字符串
- 4. Windows批處理文件在文件名中查找字符串
- 5. 批處理文件字符串串聯
- 6. 字符串中的批處理腳本子字符串
- 7. 如何從批處理文件中的字符串中找到子字符串
- 8. Windows批處理文件查找字符串,但不打印
- 9. 批處理文件字符串操作
- 10. 在批處理中查找字符串
- 11. 批處理文件字符串變量中的字符
- 12. 檢查字符串的子字符串
- 13. 如何連接Windows批處理文件中的字符串?
- 14. 在Windows批處理文件中回聲確切的字符串?
- 15. windows批處理文件中的字符串循環
- 16. Windows批處理腳本獲取文件夾中文件名的子字符串
- 17. 如何在Windows批處理文件中拆分字符串?
- 18. 檢查批處理腳本中的錯誤/查找字符串
- 19. 批處理文件中的子字符串幫助
- 20. 批處理文件:使用特殊字符的字符串
- 21. PostgreSQL的 - 檢查給定的字符串處理字符串
- 22. 在文本文件上查找字符串 - 批處理文件
- 23. 字符串處理文檔字符串
- 24. 從批處理程序中的字符串查找文件名
- 25. 批處理文件 - 如何查找字符串中的引號?
- 26. 的Windows批處理文件:環行數和拆分字符串
- 27. 在批處理文件中抓取子字符串
- 28. 批處理文件字符串字符拆分
- 29. 從批處理文件中的文件中提取字符串
- 30. 從批處理文件中的文件中讀取字符串
從這裏開始:http://www.dostips.com/DtTipsStringManipulation.php – 2012-01-06 11:03:08
謝謝!沒有真正的幫助...我希望有更容易的事情。任何其他想法? – EOB 2012-01-06 11:32:29