Пожалуйста, поправьте меня, если я ошибаюсь, но я думаю, что понял это:
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