[英]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
我從以下答案中得到了基本的想法,但它不是通過變量進行搜索,因此它並不完全是我想要的。
其他方式:
echo/%variable1%|find "%variable2%" >nul
if %errorlevel% == 0 (echo yes) else (echo no)
/
%variable1%
如果%variable1%
為空, Echo is ON
防止Echo is ON
輸出Echo is ON
或Echo 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.