excluir pasta específica na raiz e subordens


-1

Eu quero excluir pasta específica na raiz e subordens, o problema é meu código apenas excluir pasta na raiz do diretório:

SET dirname=test
SET directory=%cd%
SET found=false


    if NOT "%1%" == "" (
        set directory=%1%
    )
    echo Searching for %dirname% in %directory%

    for /d %%i in (%directory%\%dirname%) do (
        IF EXIST %%i (
            REM change the sentinel value
            set found=true

            echo Deleting the folder %%i
            REM Delete a folder, even if not empty, and don't prompt for confirmation
            RD  /s /q %%i
        )
    )

    REM logic to do if no files were found
    if NOT "%found%" == "true" (
        echo No directories were found with the name of %dirname%
    )

Esta é a estrutura da pasta:

E:sampledelete
├───folder1
├───folder2
│   └───somefolder
├───test
│   └───somefolder
├───newfolder
│   ├───test
│   │   └───somefolder
├───newfolder2
│   ├───test

depois de executar o script, ele mudou para:

E:sampledelete
├───folder1
├───folder2
│   └───somefolder
├───newfolder
│   ├───test
│   │   └───somefolder
├───newfolder2
│   ├───test

Você poderia adicionar uma tag à pergunta com a versão do Windows que está usando aqui?
music2myear

Eu uso o windows 10
Albert222

(0) por favor editar sua pergunta para adicionar a tag [windows10]. (1) O que é um subordens? (2) por favor editar sua pergunta para declarar seu problema mais claramente.
Scott

@scott Eu editei e testei no windows 7 e windows 10. ele não funciona apenas remove a pasta no diretório raiz
Albert222

Deseja continuar excluindo a linha como: C: \ 1nodeDeep \ 2nodesDeep \ 3nodesDeep \ 4nodesDeep \ ... \ test?
El8dN8

Respostas:


0

Os problemas são anotados abaixo. O problema principal era o equívoco do diretório: você não estava procurando dentro do diretório abaixo de 1 nó sob a raiz. Você teve a ideia certa. Desde que você é "novo" como você disse, valeria a pena analisar as diferenças.

@echo off
SET dirname=test
SET directory=%cd%
SET found=false

    if NOT "%1%" == "" (
        set directory=%1%
    )

    REM We want to look in the current directory not in for Z:\test
    for /d %%i in (%directory%*) do (
        echo Searching for %%i\%dirname% in %directory%

        REM We already know the folder existed because "do" ran.
        REM We want to look beneath the root directory
        IF EXIST %%i\%dirname% (
            REM change the sentinel value
            set found=true

            REM we want to delete the nodes beneath not the one in root
            echo Deleting the folder %%i\%dirname%

            REM Delete a folder
            REM we want to delete the nodes beneath not the one in root
            RD  /s /q %%i\%dirname%
        )

        IF %%1 == %dirname% (
            REM change the sentinel value
            set found=true

            REM Delete a folder, even if not empty, and don't prompt for confirmation
            echo Deleting the folder %%i\%dirname%
            RD  /s /q %%i
        )
    )

    REM logic to do if no files were found
    if NOT "%found%" == "true" (
        echo No directories were found with the name of %dirname%
    )

obrigado mas eu quero remover todas as pastas em raiz e subpastas
Albert222

0

Você está entendendo mal o que for /d faz.

for /d %%i in ( dir  1  Arquivo  1  dir  2  Arquivo  2  dir  3  Arquivo  3  ) Faz  declaração 

faz

  • SET %%i= dir 1
  • declaração
  • SET %%i= dir 2
  • declaração
  • SET %%i= dir 3
  • declaração

O problema é que você está apenas dizendo for /d %%i in ( dir 1 ) Faz declaração , Onde dir 1 é
%directory%\%dirname%. Você quer usar for /r, que faz uma pesquisa de diretório recursiva. Seu loop deve parecer algo como

    for /r %directory% %%i in (.) do (
        if exist %%i\%dirname% (
            REM change the sentinel value
            set found=true

            echo Deleting the folder %%i\%dirname%
            REM Delete a folder, even if not empty, and don't prompt for confirmation
            RD  /s /q %%i\%dirname%
        )
    )

Eu não tinha certeza se ela queria fazer uma busca recursiva, apenas 1 nó abaixo. Apenas 1 nó abaixo de um determinado diretório (ou em sua raiz de exemplo) incluindo esse próprio diretório. Eu tentei perguntar isso, mas nenhuma resposta ainda.
El8dN8

o que eu sei é que / r irá remover arquivos enquanto / d enquanto remove as pastas
Albert222

Eu não sei o que você está dizendo. Eu sei que o arquivo de lote acima funciona no Windows7, excluindo diretórios nomeados test em todos os níveis da árvore de diretórios. Você está preocupado que também possa haver arquivos nomeado test? Eu não testei para isso.
Scott

Bem? Você já tentou minha resposta? Você tem algum problema com o funcionamento?
Scott
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.