2013-02-20 69 views
2

我想看看一個字符串是否包含另一個字符串,其中兩個字符串都是變量。基本上與this thread一樣,但有兩個變量。採取這一解決方案,並將其與!VAR1!!VAR2!適用於我的情況(這些變量在FOR循環內聲明的)我想:如何在我的cmd批處理文件中替換字符串變量中的字符串變量?

if not x!VAR1:!VAR2!=!==x!VAR1! ECHO It contains !VAR2! 

遺憾的是它不工作。任何幫助將不勝感激。我也宣佈SETLOCAL EnableDelayedExpansion,所以我可以訪問變量。

任何幫助將不勝感激!

謝謝!

回答

3

正如Aacini和Rojo所示,您必須針對兩個變量,正常內部和外部延遲使用不同的擴展。

但也許你正在設置變量的同一代碼塊中運行IF。現在你不能使用正常的擴展。解決方案是將內部變量傳遞給FOR變量。

(
    :: Some code that sets the value of var2 
    :: 
    for /f "delims=" %%A in ("!var2!") do if "!var1:%%A=!" neq "!var1!" echo It contains %%A 
) 
+0

感謝您的意見。這個解決方案適用於我,因爲IF確實在設置變量的相同代碼塊中運行。 – Andrew 2013-02-21 14:18:24

4

當我檢查一個字符串是否存在於另一個字符串中時,我喜歡使用for循環而不是if

for /f "delims=" %%I in ('echo !VAR1! ^| findstr /i /c:"!VAR2!"') do (
    echo !VAR1! contains !VAR2! 
) 

這有不區分大小寫匹配的額外好處。


如果您更願意保留if語句,則嘗試一箇中間變量以減少混淆。

set vt=!VAR1:%VAR2%=! 
if x%vt%==x%VAR1% (
    echo %VAR1% remained the same after removing %VAR2%. %VAR1% did not contain %VAR2% 
) 
+0

變量擴展搜索和替換總是不區分大小寫。 FINDSTR爲您提供區分大小寫或不區分大小寫的搜索選項。如果執行不區分大小寫的搜索,我更喜歡IF方法 - 它要快得多。 – dbenham 2013-02-21 04:15:36

+0

使用FINDSTR時不需要FOR/F。此外,如果'!VAR1!'包含換行符,則您當前的FOR/F可能會打印多次。如果使用FOR/F,那麼最好這樣做[帕特里克的答案](http://stackoverflow.com/a/14985463/1012053) – dbenham 2013-02-21 12:03:05

3

這是我認爲最簡單的方法。

echo %VAR1% | find /i "%VAR2%" >nul && echo %VAR2% was found! 

更換&&||因爲如果沒有找到。

+0

+1我喜歡這樣。 – rojo 2013-02-20 17:43:24

4
if "!VAR1:%VAR2%=!" neq "!VAR1!" echo It contains !VAR2! 
+0

+1我沒有意識到'neq'也適用於字符串。涼。 – rojo 2013-02-20 17:45:08