Как проверить, содержит ли переменная другую переменную в пакетном файле Windows?

Предполагая следующий пакетный файл

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
)

Я хочу, чтобы на выходе был YES, а затем NO

Ответ 1

Я решил это со следующими

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

Я получил основную идею из следующего ответа, но он не искал переменную, так что это было не совсем то, что я искал.

Пакетный файл: найдите, если подстрока находится в строке (не в файле)

Ответ 2

другой способ:

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

/ предотвращает вывод Echo is ON или Echo is OFF в случае, если %variable1% пуст.

Ответ 3

Ответ Гэри Брантон не помог мне.

Если вы попытаетесь с помощью 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
)