Экранирование цитаты в строке поиска findstr

Как я могу правильно избежать цитаты в строке поиска при использовании findstr.exe?

пример:

findstr /misc:"namespace="" *.cs > ns.txt

это выводится на консоль, а не в указанный файл.

Я делаю это непосредственно в командной строке, а не в пакетном файле, хотя эта информация может быть полезной.

4 ответов


пожалуйста, поправьте меня, если я ошибаюсь, но я думаю, что я понял это:

findstr.exe /misc:^"namespace=\^"^" *.cs > ns.txt

это, кажется, дает правильный результат, даже если у вас есть пробелы в строку поиска. Он позволяет перенаправлять файлы, трубопроводы и дополнительные литералы в одном findstr.exe вызов для правильной работы.

исходная команда в моем вопросе не работает, потому что оба cmd.exe и findstr.exe имеют специальную обработку для " символ. Я закончил с непревзойденным набором котировки в УМК.обработка EXE-файлы.

новая команда в моем ответе работает, потому что ^" позволяет цитате пройти от cmd.exe для findstr.exe и \" сообщает findstr.exe, чтобы игнорировать эту цитату для целей обработки команд и рассматривать ее как символьный литерал.

редактировать:

Ну, мое решение было правильным, но причина, по которой оно правильное, была совершенно неправильной. Я написал небольшую программу, чтобы проверить его.

я узнал, что cmd.ехе проходит этот вход в программу, когда я передаю плохую командную строку:

test.exe /misc:namespace=" *.cs > ns.txt

с символами, экранированными правильно, cmd.exe передает этот вход в программу (и перенаправляет вывод в файл):

test.exe /misc:namespace=" *.cs

нашел Re: findstr поиск цитаты couble и перенаправление / передача вывода

Try this: 

findstr > x.txt /S /I /M /C:"\.\"" * 

Я понятия не имею, почему это работает.

не работает для трубопровода вывода, хотя. См. связанную ссылку трубопровод команда findstr это


по моим тестам правильный символ обратной косой черты:

c:\Temp>findstr /isc:"session id=\"59620\"" C:\Temp\logs\some*.xml
C:\Temp\logs\some_2016_11_03.xml: <session id="59620" remoteAddress="192.168.195.3:49885"/>

разве этого не достаточно:

findstr /misc:namespace=^" *.cs > ns.txt

?

редактировать

если вы искали способ передать " символ внутри цитируемого параметра, тогда это может быть (используя Ваш пример)

findstr /misc:"namespace=""" *.cs > ns.txt

(the " символ повторяется дважды в кавычках).