Вы обнаружили одну проблему, вызванную разницей в обработке цитат между cmd
парсером и парсерами аргументов исполняемых программ.
Хотя это то, что кажется правильным
findstr /RC:"h25v06.*hdf\"" "index.html" >temp.txt
^^ escaped quote to findstr
^.............^ ^..........^ arguments to findstr
^ redirection operator
ваша проблемачто когда cmd
пытается проанализировать строку (чтобы создать внутреннее представление команды и определить, нужно ли перенаправление), как для cmd
, двойная кавычка - это "экранированная" (закрыть и снова открыть) цитатанаблюдаемые кавычки
findstr /RC:"h25v06.*hdf\"" "index.html" >temp.txt
^^ escaped quote
^ open ^close ^open
Это означает, что каждый рассматривается как аргумент findstr
findstr /RC:"h25v06.*hdf\"" "index.html" >temp.txt
^.....^ command
^........................................^ argument
Экранированная кавычка скрывает оператор перенаправления на cmd
, который передает все findstr
.
Внутри findstr
обработка аргументов отличается, и он видит
findstr /RC:"h25v06.*hdf\"" "index.html" >temp.txt
^.............^ ^..........^ ^.......^ arguments to findstr
Это означает, что предполагаемое перенаправление теперь рассматривается как файл, в котором производится поиск.
Одно простое решение - просто изменить положение перенаправления
>temp.txt findstr /RC:"h25v06.*hdf\"" "index.html"
НО это оставляет другую проблему.Как указано, если имя файла, обрабатываемое findstr
, содержит пробелы или специальные символы, команда не выполнится, поскольку они находятся вне области в кавычках.
Итак, нам нужен способ разделения двух кавычек,без включения нежелательного символа в выражение findstr
, но с правильным закрытием каждой области в кавычках
findstr /RC:"h25v06.*hdf\"^" "index.html" >temp.txt
^"
рассматривается cmd
как реальная экранированная кавычка из области в кавычках (закрываетсяпредыдущая цитата), поэтому ^
не будет передано findstr
.Теперь для cmd
указаны области
findstr /RC:"h25v06.*hdf\"^" "index.html" >temp.txt
^............^ ^..........^
Проблемная кавычка - это экранированная последовательность, которая обрабатывается как другой символ и findstr
получает предполагаемые аргументы
findstr /RC:"h25v06.*hdf\"" "index.html"
^.............^ ^..........^