Экранирование цитаты в строке поиска 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 "
символ повторяется дважды в кавычках).