Findstr не возвращает ожидаемый результат
Привет всем У меня есть следующая строка кода, чтобы перечислить все файлы, которые соответствуют слову Hello
findstr /s "Hello" .\*.* > C:\MyDir\result.txt
У меня есть несколько файлов внутри моей папки, как file1.xml
а также file2.xml
но когда я выполняю этот скрипт, он дает мне только file1.xml
но не file2.xml
Кто-нибудь может мне помочь. Содержимое внутри моих обоих файлов <Hello></Hello>
а также <Hello>
2 ответа
Предполагая, что ваш регистр правильный, и вы хотите, чтобы регистр соответствовал (используйте /i
чтобы сделать совпадения без учета регистра) Я подозреваю, что ваш второй файл в кодировке Unicode. Вы можете убедиться в этом, открыв файл в Блокноте и нажав Файл → Сохранить как.... В раскрывающемся списке " Кодировка" в нижней части диалогового окна "Сохранить как" отображается текущая кодировка файла.
findstr
не может обрабатывать файлы Unicode, но find
может (Раймонд Чен объяснил, почему есть две команды). Тем не мение, find
не может перейти в подпапки, поэтому вам понадобится либо for
петля
for /r %f in (*.*) do find "Hello" "%~ff"
или же forfiles
:
forfiles /s /c "cmd /c find \"Hello\" @path"
С учетом вышесказанного, поскольку вы, похоже, имеете дело с файлами XML, вы можете использовать PowerShell вместо команд CMD не только потому, что он прозрачно обрабатывает ANSI и Unicode, но и потому, что он поставляется со встроенным анализатором XML.
В зависимости от того, что вы хотите достичь в конце концов, вы можете делать такие вещи, как
# get full paths for files containing <Hello> nodes
Get-ChildItem -Recurse |
Where-Object { ([xml](Get-Content $_)).SelectNodes('//Hello') } |
Select-Object -Expand FullName
или же
# get all <Hello> nodes
Get-ChildItem -Recurse | ForEach-Object {
([xml](Get-Content $_)).SelectNodes('//Hello')
}
Я думаю, что вы можете проверить свой синтаксис. Вы звоните перенаправить запись >
когда я думаю, что вы хотите использовать переадресацию добавления >>
, Итак, ваш пакетный файл выполняет свою работу... Он просто постоянно перезаписывает предыдущий результат.
Попробуй это:
findstr /s "Hello" .\*.* >> C:\MyDir\result.txt
Дополнительную информацию о перенаправлениях см. На этой странице по https://ss64.com/nt/syntax-redirection.html ss64.com.