Подтвердить что ты не робот

Проверьте строку подстроки в пакетном файле (Windows)?

Скажем, у меня есть текст в переменной с именем $1. Теперь я хочу проверить, содержит ли этот $1 определенную строку. Если он содержит определенную строку, я хочу напечатать сообщение. Печать не проблема, проблема в проверке... идеи, как это сделать?

4b9b3361

Ответ 1

Самый простой способ, на мой взгляд, заключается в следующем:

set YourString=This is a test

If NOT "%YourString%"=="%YourString:test=%" (
    echo Yes
) else (
    echo No
)

Basiclly строка после ':' - это строка, которую вы ищете, и вы используете не infront строки if, потому что%: *% удаляет * из строки, делая их не равными.

Ответ 2

Утилита поиска и замены SET выполняется во многих случаях, но не поддерживает поиск с учетом регистра или регулярного выражения.

Если вам нужен поиск с учетом регистра или ограниченная поддержка регулярных выражений, вы можете использовать FINDSTR.

Чтобы избежать осложнений экранирования специальных символов, лучше всего, чтобы строка поиска находилась в переменной, и как поиск, так и цель доступны через задержанное расширение.

Вы можете передать $1 в команду FINDSTR командой ECHO. Используйте ECHO( в случае, если $1 является undefined, и будьте осторожны, чтобы не добавлять лишние пробелы. ECHO !$1! будет эхо ECHO is off. (или включен), если $1 - undefined, тогда как ECHO(!$1! будет эхом пустую строку, если undefined.

FINDSTR будет эхом $1, если найдет строку поиска - вы не хотите, чтобы вы перенаправляли вывод в nul. FINDSTR устанавливает ERRORLEVEL в 0, если найденная строка поиска, и 1, если она не найдена. Это то, что используется, чтобы проверить, была ли найденная строка. && и || - удобный синтаксис для проверки соответствия (ERRORLEVEL 0) или отсутствие соответствия (ERRORLEVEL не 0)

Поддержка регулярного выражения является рудиментарной, но все же полезна.

См. FINDSTR/? для получения дополнительной информации.

Этот пример регулярного выражения будет искать $1 для "BEGIN" в начале строки, "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
)

Ответ 3

Насколько я знаю, 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