Скажем, у меня есть текст в переменной с именем $1. Теперь я хочу проверить, содержит ли этот $1 определенную строку. Если он содержит определенную строку, я хочу напечатать сообщение. Печать не проблема, проблема в проверке... идеи, как это сделать?
Проверьте строку подстроки в пакетном файле (Windows)?
Ответ 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