簡體   English   中英

如何檢查一個變量是否包含 windows 批處理文件中的另一個變量?

[英]How can I check if a variable contains another variable within a windows batch file?

假設以下批處理文件

set variable1=this is variable1
set variable2=is
set variable3=test

if variable1 contains variable2 (
    echo YES
) else (
    echo NO
)

if variable1 contains variable3 (
    echo YES
) else (
    echo NO
)

我希望 output 是 YES,然后是 NO

我用以下方法解決了這個問題

setLocal EnableDelayedExpansion

set variable1=this is variable1
set variable2=is
set variable3=test

if not "x!variable1:%variable2%=!"=="x%variable1%" (
    echo YES
) else (
    echo NO
)

if not "x!variable1:%variable3%=!"=="x%variable1%" (
    echo YES
) else (
    echo NO
)

endlocal

我從以下答案中得到了基本的想法,但它不是通過變量進行搜索,因此它並不完全是我想要的。

批處理文件:查找substring是否在字符串中(不在文件中)

其他方式:

echo/%variable1%|find "%variable2%" >nul
if %errorlevel% == 0 (echo yes) else (echo no)

/ %variable1%如果%variable1%為空, Echo is ON防止Echo is ON輸出Echo is ONEcho is OFF

加里布倫頓的回答對我不起作用。

如果您嘗試使用set variable1="C:\\Users\\My Name\\" ,則最終會出現錯誤:

 'Name\""' is not recognized as an internal or external command

調整此答案找出環境變量是否包含子字符串 ,我最終得到:

echo.%variable1%|findstr /C:"%variable2%" >nul 2>&1
if not errorlevel 1 (
   echo Found
) else (
   echo Not found
)

以下內容基於JBE 在此線程中的回答 它區分空/未定義的變量。

if not defined VARIABLE1 (echo VARIABLE1 undefined) & goto proceed
if not defined VARIABLE2 (echo VARIABLE2 undefined) & goto proceed
echo %VARIABLE1% | find "%VARIABLE2%" > nul
if ERRORLEVEL 1 (echo Not found) & goto proceed
echo Found
:proceed

如果VARIABLE1的值包含圓括號,例如值C:\Program Files (x86) ,則圓括號可能被解釋為不同的命令而不是回顯,從而導致錯誤。 為了正確回顯,像(x86)這樣的子字符串可以用插入符號轉義,例如:

SET V1_DISPLAY=%VARIABLE1%
if /i "%V1_DISPLAY:(x86)=%" NEQ "%V1_DISPLAY%" set V1_DISPLAY=%V1_DISPLAY:(x86)=^^(x86^^)%
echo %V1_DISPLAY% | find "%VARIABLE2%" > nul

上面的第二個陳述可以解讀如下:

如果將 substring (x86)替換為什么都沒有影響,則(x86)存在,因此將出現的任何(x86)替換為^^(x86^^) ,其中每對脫字符代表一個轉義的單個脫字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM