Пожалуйста, поправьте меня, если я ошибаюсь, но я думаю, что понял это:
findstr.exe /misc:^"namespace=\^"^" *.cs > ns.txt
Кажется, это дает правильный результат, даже если в строке поиска есть пробелы. Это позволяет корректно работать перенаправлению файлов, конвейеру и дополнительным литералам в одном и том же вызове findstr.exe.
Исходная команда в моем вопросе не работает, потому что и cmd.exe, и findstr.exe имеют специальную обработку для символа "
. В итоге я получил непревзойденный набор кавычек при обработке cmd.exe.
Новая команда в моем ответе работает, потому что ^"
позволяет передать цитату из cmd.exe в findstr.exe, а \"
сообщает findstr.exe игнорировать эту цитату для целей обработки команды и рассматривать ее как символьный литерал.
Изменить:
Что ж, мое решение было правильным, но причина, по которой оно было правильным, была совершенно неправильной. Я написал небольшую программу для проверки.
Я обнаружил, что cmd.exe передает этот ввод в программу, когда я передаю неверную командную строку:
test.exe /misc:namespace=" *.cs > ns.txt
При правильном экранировании символов cmd.exe передает этот ввод в программу (и перенаправляет вывод в файл):
test.exe /misc:namespace=" *.cs
person
Merlyn Morgan-Graham
schedule
13.02.2011