Уловка поиска и замены SET работает во многих случаях, но она не поддерживает регистрозависимый поиск или поиск по регулярным выражениям.
Если вам нужен регистрозависимый поиск или ограниченная поддержка регулярных выражений, вы можете использовать FINDSTR.
Чтобы избежать сложностей с экранированием специальных символов, лучше всего, если строка поиска находится в переменной, а поиск и цель доступны через отложенное расширение.
Вы можете передать $ 1 в команду FINDSTRс помощью команды ECHO.Используйте ECHO(
в случае, если $ 1 не определено, и будьте осторожны, чтобы не добавлять лишние пробелы.ECHO !$1!
отобразит ECHO is off.
(или включит), если $ 1 не определено, тогда как ECHO(!$1!
выведет пустую строку, если не определено.
FINDSTR отобразит $ 1, если найдет строку поиска - вы не будетехотите, чтобы вы перенаправили вывод на nul.FINDSTR устанавливает ERRORLEVEL в 0, если строка поиска найдена, и в 1, если она не найдена.Это то, что используется для проверки, была ли найдена строка.&&
и ||
- это удобный синтаксис для проверки соответствия (ERRORLEVEL 0) или отсутствия соответствия (ERRORLEVEL not 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
)