Как найти папки, которые содержат определенную строку, используя CMD? - PullRequest
0 голосов
/ 27 мая 2019

Мне нужно найти путь к каждой папке, содержащей слова «тест» или «тест» или «тест» в определенном месте.Дерево файлов огромно.

Это предназначено для удаления каждой папки, содержащей «test».Я пытался использовать функцию findstr.

findstr /i "test"

Я ожидаю получить путь к каждой папке, содержащей "test"

1 Ответ

1 голос
/ 27 мая 2019

Список каталогов может быть сгенерирован и повторен с использованием цикла FOR. Когда вы убедитесь, что правильные каталоги будут удалены, удалите echo из строки, содержащей rmdir.

@echo off
pushd \
for /f "delims=" %%a in ('dir /s /b /a:d "*test*"') do (
    echo if exist "%%~a" (rmdir /s /q "%%~a")
)
popd

Если вы хотите продвинуться вперед в Powershell, который, как заявляет Microsoft, является будущим, что-то подобное может сработать. Когда вы убедитесь, что правильные каталоги будут удалены, удалите -WhatIf из командлета Remove-Item.

=== Remove-TestDirectories.ps1

$previousdir = ":" # set to impossible filesystem name

Get-ChildItem -Directory -Recurse -Path "C:\" -Filter "*test*" -Force -ErrorAction SilentlyContinue |
    Sort-Object -Property FullName |
    ForEach-Object {
        #"{0} and {1} and {2}" -f @($previousdir, $_.FullName, $_.FullName.StartsWith($previousdir))
        if (-not $_.FullName.StartsWith($previousdir)) {
            $previousdir = $_.FullName
            if (Test-Path -Path $_.FullName) { Remove-Item -Path $_.FullName -Recurse -WhatIf}
        }
    }

Это можно запустить из оболочки cmd.exe.

powershell -NoLogo -NoProfile -File Remove-TestDirectories.ps1
...