Назад | Перейти на главную страницу

Выполнение логического сравнения OR с findstr.exe

Это может быть глупый вопрос, но даже после чтение документации Я до сих пор не знаю, как найти все строки в файле, содержащие ".cpp" или ".час".

Есть ли способ сделать это?

Например (не работает):

findstr /i .cpp,.h // , == OR

Попробуйте это, должно сработать для вас.

findstr /i "\.cpp \.h" myfile.txt

Оберните в кавычки и разделите пробелом. Обратите внимание, что вам также нужно избежать. в них обоих.

Если вам нужно включить фразы (слова, разделенные пробелами), вы можете сделать это:

findstr /i /c:"IBSS" /c:"WDI Version" /c:"Soft Ap"

Или, если вы получаете нежелательные строки, вы можете исключить их с помощью /v параметр тоже:

findstr /i /c:Hosted /c:Version /c:Driver | findstr /v /i /c:drivers /c:native

(Проверено на Windows 7 и Windows 10)

Как вы формируете OR логика зависит от того, что вы ищете, и от ваших ожидаемых будущих изменений, если это применимо.

Если это список запросов без пробелов, вы можете сделать это так, быстро и грязно:

findstr "thing1 thing2 thing3 thing4 thing5" и если что-то из этого присутствует, он вернет значение true и выйдет из 0.

Если в том, что вы ищете, есть пробелы, вы должны использовать findstrбуквальные строки поиска с /c:"" тип параметра. Вы все равно можете использовать этот тип параметра, если нет пробелов.

/C:string Uses specified string as a literal search string.

тем не мение, нельзя сочетать буквальное с быстрым и грязным. Например, это не сработает:

findstr "thing1 thing2" /c:"thing3 thingy"

Вам нужно будет преобразовать предыдущие параметры в буквальные параметры, например:

findstr /c:"thing1" /c:"thing2" /c:"thing3 thingy"

Из-за этого лучше использовать буквальный вариант, потому что он лучше масштабируется с динамическими скриптами. Однако, если это просто статический набор запросов без пробелов, быстрого и грязного способа будет достаточно.