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
windows-10
batch
Albert222
fonte
fonte
Respostas:
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.
fonte
Você está entendendo mal o que
for /d
faz.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
, Ondedir 1
é%directory%\%dirname%
. Você quer usarfor /r
, que faz uma pesquisa de diretório recursiva. Seu loop deve parecer algo comofonte
test
em todos os níveis da árvore de diretórios. Você está preocupado que também possa haver arquivos nomeadotest
? Eu não testei para isso.