Как рекурсивно искать в командной строке, исключая определённый каталог? [закрыто]

Вопрос или проблема

Обычно я использую dir /s <ключевое слово> в командной строке, чтобы найти файлы по имени и с подстановочными знаками, но каталог C:\ProgramData\Microsoft\Windows\Containers\BaseImages всегда засоряет мои результаты поиска. Я отключил Windows Sandbox и Контейнеры с помощью:

Disable-WindowsOptionalFeature -Online -FeatureName "Containers-DisposableClientVM" -NoRestart
Disable-WindowsOptionalFeature -Online -FeatureName "Containers" -NoRestart

Однако время от времени мне нужно снова их включать с помощью:

Enable-WindowsOptionalFeature -Online -FeatureName "Containers-DisposableClientVM" -NoRestart
Enable-WindowsOptionalFeature -Online -FeatureName "Containers" -NoRestart

Удалить C:\ProgramData\Microsoft\Windows\Containers\BaseImages\432cb2cc-0c12-49c7-a0bc-a144b37316f1\BaseLayer.vhdx из командной строки кажется невозможным.

Есть ли способ рекурсивного поиска в каталоге из командной строки с исключением конкретного пути, используя CMD batch, PowerShell, VBScript или JScript?

Простой ответ был бы в следующем.

dir /b /s <ключевое слово> | find /v "C:\ProgramData\Microsoft\Windows\Containers\BaseImages\"

Вы на самом деле не пропускаете. Вместо этого вы просто фильтруете.


У меня установлен git на моем компьютере с Windows 10. Вы можете скачать git здесь. Я установил с помощью настроек по умолчанию. Это дает мне доступ к командам Unix/Linux. Так что на своем компьютере я могу ввести следующее в окне командной строки.

"C:\Program Files\Git\usr\bin\find" . -ipath C:\ProgramData\Microsoft\Windows\Containers\BaseImages -prune -o -iname <ключевое слово> -print

Здесь я предполагаю, что вы ищете из текущего каталога. Я также предполагаю, что <ключевое слово> — это имя файла или имена файлов, которые вы ищете, возможно, с подстановочными знаками. Например, *.exe.

Ответ или решение

Для выполнения рекурсивного поиска в командной строке с исключением определенной директории можно использовать несколько подходов, в зависимости от вашего предпочтения к инструментам: CMD, PowerShell или утилиты, такие как Git Bash. Рассмотрим три основных метода.

1. Использование CMD

В командной строке Windows вы можете использовать команду dir в сочетании с find, чтобы отфильтровать результаты:

dir /b /s <ключевое_слово> | find /v "C:\ProgramData\Microsoft\Windows\Containers\BaseImages\"

Здесь:

  • /b — отображает только имена файлов,
  • /s — выполняет поиск в подкаталогах,
  • find /v — исключает строки, содержащие указанный путь.

Примечание:

Этот способ не «пропускает» директорию в полном смысле, а просто фильтрует вывод, исключая результаты из указанной папки.

2. Использование PowerShell

Если вы предпочитаете PowerShell, можно использовать следующую команду:

Get-ChildItem -Path "C:\" -Filter "<ключевое_слово>" -Recurse | Where-Object { $_.FullName -notlike "C:\ProgramData\Microsoft\Windows\Containers\BaseImages\*" }

Здесь:

  • Get-ChildItem (или gci) используется для получения файлов и директорий,
  • -Recurse указывает на рекурсивный поиск,
  • Where-Object фильтрует результаты, исключая те, которые находятся в указанной директории.

3. Использование Git Bash

Если у вас установлен Git для Windows, вы можете воспользоваться утилитами Unix/Linux. Откройте Git Bash и выполните следующую команду:

find . -path "C:/ProgramData/Microsoft/Windows/Containers/BaseImages" -prune -o -iname "<ключевое_слово>" -print

В этом случае:

  • -path задает путь, который нужно исключить,
  • -prune игнорирует путь, указанный в предыдущем аргументе,
  • -o позволяет выполнять альтернативные действия на оставшихся файлах,
  • -iname позволяет искать файлы без учета регистра.

Заключение

Выбор метода зависит от ваших предпочтений и установленного программного обеспечения. Для быстрого фильтрационного поиска можно использовать CMD, а если требуется больше возможностей и гибкости — лучше перейти на PowerShell или Git Bash. Все предложенные способы помогут вам эффективно выполнять поиск файлов, избегая лишней папки, что значительно упростит работу.

Оцените материал
Добавить комментарий

Капча загружается...