Вопрос или проблема
Обычно я использую 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. Все предложенные способы помогут вам эффективно выполнять поиск файлов, избегая лишней папки, что значительно упростит работу.