В командном файле у меня есть строка abcdefg
. Я хочу проверить, есть ли bcd
в строке.
К сожалению, кажется, что все решения, которые я нахожу, ищут файл для подстроки, а не строку для подстроки.
Есть ли простое решение для этого?
В командном файле у меня есть строка abcdefg
. Я хочу проверить, есть ли bcd
в строке.
К сожалению, кажется, что все решения, которые я нахожу, ищут файл для подстроки, а не строку для подстроки.
Есть ли простое решение для этого?
Windows
иcmd
или этоms-dos
. MSDOS не является частью Windows , в течение долгого времени.Ответы:
Да, вы можете использовать подстановки и проверить исходную строку:
%str1:bcd=%
Немного заменитbcd
вstr1
пустой строке, что делает его отличным от оригинала.Если в оригинале не было
bcd
строки, измененная версия будет идентичной.Тестирование с помощью следующего скрипта покажет его в действии:
И результаты разных заездов:
Пара заметок:
if
Заявление мясо этого решения, все остальное является поддержка вещи.x
До двух сторон равенства является обеспечение того , что строкаbcd
работает нормально. Он также защищает от определенных «неправильных» стартовых персонажей.источник
Вы можете передать исходную строку
findstr
и проверить значение,ERRORLEVEL
чтобы увидеть, была ли найдена строка шаблона. Нулевое значение указывает на успех, и шаблон был найден. Вот пример:Когда это выполняется в CMD.EXE, мы получаем:
источник
Я обычно делаю что-то вроде этого:
Пример:
Вывод:
Я не знаю, если это лучший способ.
источник
Для совместимости и простоты использования часто лучше использовать FIND для этого.
Вы также должны подумать, хотите ли вы сопоставить регистр с учетом регистра или без учета регистра.
Метод с 78 баллами (я полагаю, что я имел в виду пост Паксдиабло) будет сопоставляться только с учетом регистра, поэтому вы должны поставить отдельную проверку для каждого варианта регистра для каждой возможной итерации, которую вы можете захотеть сопоставить.
(Какая боль! Всего 3 буквы, что означает 9 различных тестов для выполнения проверки!)
Кроме того, во многих случаях предпочтительно сопоставлять выходные данные команды, переменную в цикле или значение переменной-указателя в вашем пакете / CMD, что не так просто.
По этим причинам это предпочтительная альтернативная методология:
Использование: Найти [/ I] [/ V] «Персонажи для сопоставления»
[/ I] (без учета регистра) [/ V] (НЕ ДОЛЖНО содержать символы)
Как одиночная линия:
Многоканальный:
Как уже упоминалось, это отлично подходит для вещей, которые не входят в переменные, которые также допускают подстановку строк:
источник
setlocal EnableExtensions
затемIF /I
для сравнения без учета регистра.Если вы обнаруживаете присутствие, вот самое простое решение:
Это прекрасно работает для сброса вывода команд Windows в логическую переменную. Просто замените эхо командой, которую хотите запустить. Вы также можете связать Findstr вместе, чтобы дополнительно квалифицировать оператор, используя каналы. EG для управления службами (SC.exe)
Тот оценивает выходные данные SC Query для служб обновления Windows, которые появляются в виде многострочного текста, находит строку, содержащую «состояние», затем находит, встречается ли слово «выполняется» в этой строке, и соответственно устанавливает уровень ошибки.
источник
SET STRING=abcdefgh SET SUBSTRING=bcd ECHO %STRING% | FINDSTR /C:"%SUBSTRING%" >nul & IF ERRORLEVEL 1 (ECHO CASE FALSE) else (ECHO CASE TRUE)
Возможно, я слишком поздно приду с этим ответом, но принятый ответ работает только для проверки, является ли «жестко закодированная строка» частью строки поиска.
Для динамического поиска вы должны сделать это:
Примечание: вы можете взять две переменные в качестве аргументов.
источник
Лучший ответ был здесь :
источник
источник
Решения, которые ищут файл для подстроки, могут также искать строку , например.
find
илиfindstr
.В вашем случае простое решение было бы передать строку в команду вместо указания имени файла, например.
чувствительная к регистру строка:
echo "abcdefg" | find "bcd"
игнорировать регистр строки:
echo "abcdefg" | find /I "bcd"
Если совпадение не найдено, вы получите пустой ответ на CMD, и% ERRORLEVEL% будет установлен в 1
источник