Как исключить папку из поиска строки

>>"results\txtmail.txt" findstr /i /p /s mail %userprofile%\*.txt

А что если я хочу исключить из поиска C:\Users\ Имя пользователя \AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5?

1 ответ

Решение

После обнаружения этого findstr игнорирует скрытый бит и находит файлы в скрытых папках независимо от того, я тогда использовал for Команда (которая уважает это), чтобы придумать следующее, изложенное для командного файла:-

@echo off
pushd %userprofile%
for /r %%f in (*.txt) do echo %%f | findstr "\Temporary" >NUL: || findstr /i /p mail "%%f" nul:
popd

Заметки:-

  • Мне не удалось получить for /r работать, когда я добавляю путь к каталогу внутри файла соответствия, следовательно, использование pushd/popd,
  • Первый findstr ищет \Temporary (это можно уточнить) в пути к файлу и выполняет второй findstr только если он не найден.
  • Экстра nul: параметр на втором findstr гарантирует, что имя файла будет напечатано с найденной строкой: обычно оно пропускается, когда передается только один файл (может быть другой способ сделать это, но я не часто использую эту команду).
  • Если вы делаете это часто, вы можете рассмотреть вопрос о перемещении интернет-кэша в другой каталог за пределами профиля пользователя.

Я проверял это решение, когда комментарий Дэвида Постила появился выше. Я только что заметил это, но я все равно отправлю свой ответ, так как он добавляет пару моментов, которые необходимо учитывать в любом решении.

Другие вопросы по тегам