Como excluir arquivos / subpastas em um diretório específico no prompt de comando no Windows

308

Digamos, há uma variável chamada %pathtofolder%, pois deixa claro que é o caminho completo de uma pasta.

Quero excluir todos os arquivos e subpastas deste diretório, mas não o próprio diretório.

Mas, pode haver um erro como 'este arquivo / pasta já está em uso' ... quando isso acontece, ele deve apenas continuar e pular esse arquivo / pasta.

Existe algum comando para isso?

Deniz Zoeteman
fonte
Possível duplicata do que aconteceu com a deltree e qual é a sua substituição?
Rosberg Linhares
É uma loucura a dificuldade do Windows para excluir pastas ... Ou criar uma que comece com um ponto ... Graças a Deus pela integração do Bash no Windows! rm -rf path\to\foldertrabalhos em Windows 10 (ou poderia vir de Git Bash ... de qualquer forma, se você tem que é erva de uma tentativa!)
Stijn de Witt

Respostas:

256

Você pode usar este script de shell para limpar a pasta e os arquivos na C:\Temp fonte :

del /q "C:\Temp\*"
FOR /D %%p IN ("C:\Temp\*.*") DO rmdir "%%p" /s /q

Crie um arquivo em lotes (por exemplo, delete.bat) contendo o comando acima. Vá para o local em que o arquivo delete.bat está localizado e execute o comando: delete.bat

Iain
fonte
20
Eu tentei, mas infelizmente os arquivos não foram excluídos, apenas as subpastas são excluídas. Por exemplo, eu tenho uma pasta chamada Teste. Ele contém 2 pastas nomeadas como "Ripon" e "Wasim" e contém um arquivo chamado "riponalwasim.txt". As subpastas Ripon e Wasim foram excluídas, mas riponalwasim.txt não foi excluído.
Ripon Al Wasim
16
Use único sinal de porcentagem se você deseja executar direto da linha de comando, por exemplo%p
Alex
2
Triste que isso leva 2 linhas, mas pelo menos funciona! Estou cansado de procurar um "one-liner" funcional e vou com esse aqui, obrigado!
nightcoder
2
Você pode usar o operador '&&' para executar dois comandos em uma linha sem um arquivo bat (observe o único '%' em vez de '%%'). del / s / q "minha pasta *" && FOR / D% p IN ("minha pasta *") DO rmdir "% p" / s / q
ravinsp
<for / F "delims =" %% i in ('dir / b / a-d') do (eco de "%% i" / q)> pode ajudar nos arquivos (basta remover esse eco)
grenix
340

rmdir é o meu comando favorito de todos os tempos para o trabalho. Ele funciona para excluir arquivos e pastas enormes com subpastas. Um backup não é criado, portanto, certifique-se de ter copiado seus arquivos com segurança antes de executar este comando.

RMDIR "FOLDERNAME" /S /Q

Isso remove silenciosamente a pasta e todos os arquivos e subpastas.

Suresh
fonte
65
Isso parece remover o caminho da pasta que o OP estava querendo manter.
Fuzz Evans
4
Isso removeria a própria pasta, então você precisará adicionar outro comando: md FOLDERNAME(veja a resposta em @rakoczyn abaixo).
Thdan
4
O que você quer dizer com "backup criado" aqui? Eu não posso ver nada que possa criar qualquer tipo de cópia de segurança ...
Paul Groke
1
O diretório não está vazio A mensagem veio como resposta!
Jamshaid Kamran
10
Para não remover a própria pasta, torne-a no diretório atual antes e use "." como FOLDERNAME. Recriá-lo posteriormente não é necessariamente o mesmo, pois as ACLs podem ser perdidas. cd "FOLDERNAME" RD . /S /Q
Moritz Ambos
85

A solução mais simples que consigo pensar é remover todo o diretório com

RD /S /Q folderPath

Em seguida, crie este diretório novamente:

MD folderPath
wojciech_rak
fonte
5
e se você tiver permissão para excluir, mas não criar novas pastas? Espero que seja possível :)
Sandy
13
Esta é uma péssima solução, pois apresenta uma corrida no sistema de arquivos para o nó do diretório, ou seja, o segundo comando pode falhar se executado imediatamente depois.
Rok Strniša
22
Além disso, a má solução se o diretório tem permissões especiais você apenas nuked ahem (gritos)
Immortal Azul
Não desanime com a resposta: 'O diretório não está vazio.', Apenas emitir o comando duas vezes :-)
Kieran Ryan
1
RD e RMDIR são o mesmo comando e, como você postou esta resposta 9 meses depois que alguém declarou a mesma resposta, por que as pessoas estão lhe dando pontos?
Comute
51

Isso removerá as pastas e arquivos e deixará a pasta para trás.

pushd "%pathtofolder%" && (rd /s /q "%pathtofolder%" 2>nul & popd)
foxidrive
fonte
4
Para quem não tem certeza sobre essa abordagem: definitivamente não recria o diretório. Sem 2>nul, ele gera "O processo não pode acessar o arquivo porque está sendo usado por outro processo".
Rok Strniša
6
Odeio que o Windows não possa excluir arquivos e pastas que estão sendo usados ​​por algum programa. E eu amo que você tenha usado isso a seu favor nessa frase.
andref 27/03
Então essa uber-mágica é como esvaziamos uma pasta no Windows? Impressionante :)
mlvljr
3
@mlvljr Somente se você quiser manter a pasta pai também. RD /?mostrará a maneira simples de esvaziar uma pasta.
foxidrive
1
Isso é bom se você precisar voltar ao seu local de partida, caso contrário, CD mypath && RD /S .seria o suficiente. Não gosto que você precise repetir o caminho duas vezes, porém, para caminhos longos, fica difícil ler. Então, eu apenas adicionaria um set p="mypath"no início.
Amit Naidu
39
@ECHO OFF

SET THEDIR=path-to-folder

Echo Deleting all files from %THEDIR%
DEL "%THEDIR%\*" /F /Q /A

Echo Deleting all folders from %THEDIR%
FOR /F "eol=| delims=" %%I in ('dir "%THEDIR%\*" /AD /B 2^>nul') do rd /Q /S "%THEDIR%\%%I"
@ECHO Folder deleted.

EXIT

... exclui todos os arquivos e pastas abaixo do diretório especificado, mas não o diretório em si.

thepip3r
fonte
4
esta deve ser a resposta certa .. apenas fazer simples .. deletemyfoldercontents.bat arquivo .. pop em seu caminho, e ele funciona como um encanto ..
timbrown
3
A linha de comando DEL perde a opção /Ade excluir também arquivos com conjunto de atributos ocultos e %dir%\*deve ser colocada entre aspas duplas, como "%dir%\*"também funciona para diretórios que contêm um espaço ou um desses caracteres &()[]{}^=;!'+,`~. E a linha de comando FOR deve ser modificada para FORfor /F "eol=| delims=" %%I in ('dir "%dir%\*" /AD /B 2^>nul') do rd /Q /S "%dir%\%%I" porque ignora diretórios com conjunto de atributos ocultos. DIR com opções gera todos os diretórios apenas com seus nomes. BTW: não é um bom nome para uma variável de ambiente. /AD /Bdir
Mofi
1
não exclui subpasta
RMiranda
1
@RMiranda, nos meus testes, faz exatamente o que o OP pediu. Você tem um caso em que não exclui as subpastas?
thepip3r
Esta resposta atende ao requisito "pode ​​haver um erro como 'este arquivo / pasta já está em uso' ... quando isso acontece, ele deve apenas continuar e pular esse arquivo / pasta". ?
Peter Mortensen
30
CD [Your_Folder]
RMDIR /S /Q .

Você receberá uma mensagem de erro informando que o comando RMDIR não pode acessar a pasta atual e, portanto, não pode excluí-la.

Atualização :

A partir deste comentário útil (graças a Moritz Both ), você pode adicionar &&entre, portanto RMDIR, não será executado se o CDcomando falhar (por exemplo, nome do diretório digitado incorretamente):

CD [Your_Folder] && RMDIR /S /Q .

Na referência de linha de comando do Windows :

/ S: exclui uma árvore de diretórios (o diretório especificado e todos os seus subdiretórios, incluindo todos os arquivos).

/ Q: especifica o modo silencioso. Não solicita confirmação ao excluir uma árvore de diretórios. (Observe que / q funciona apenas se / s for especificado.)

O.Badr
fonte
1
Isso é perfeito para esvaziar o temp, mas isso cd [Your_Folder]é super crítico - vou ter que lembrar disso para não excluir o diretório em si ...
sáb
5
Esta é a solução correta. Adicione &&entre os comandos em vez da quebra de linha e você estará seguro de um CD com falha.
Moritz Ambos
Esta é uma solução simples e correta. Até funciona com o shell de comando do Azure!
Philippe
solução muito ruim ... Eu, por exemplo, preciso desta exclusão da linha de comando para uma atualização svn - desejo excluir todos os arquivos e pastas antes de fazer a atualização svn, porque pode haver algumas alterações na máquina em que eu uso isso, mas relevantes são apenas os itens registrados. Fazendo RMDIR / S / Q. também remove o link SVN e, portanto, faz com que a pasta nenhuma pasta svn mais
Dominik Lemberger
Como isso é diferente das quatro respostas anteriores?
Peter Mortensen
9

RD significa REMOVE Directory.

/ S: exclua todos os arquivos e subpastas, além da própria pasta. Use isso para remover uma árvore de pastas inteira.

/ Q: Silencioso - não exibe confirmação YN

Exemplo:

RD /S /Q C:/folder_path/here
Sireesh Yarlagadda
fonte
1
upvoted por ser o único a explicar o que /Se /Qmédia
SourceVisor
2
No. rdé equivalente rmdire removerá o diretório em si e não é o que o OP deseja.
WesternGun
Esta resposta atende ao requisito "pode ​​haver um erro como 'este arquivo / pasta já está em uso' ... quando isso acontece, ele deve apenas continuar e pular esse arquivo / pasta". Por exemplo, ele aborta completamente em vez de continuar?
Peter Mortensen
8

Eu uso o Powershell

Remove-Item c:\scripts\* -recurse

Ele removerá o conteúdo da pasta, não a própria pasta.

rhellem
fonte
A resposta de rhellem é recente, mas é a única resposta que realmente fará isso por mim. (Win 8.1, não por opção)
philologon
2
A partir da linha de comando do lote:powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
Rosberg Linhares
Observe que o "*" é necessário ou ele removerá a pasta.
mhenry1384
7

Nenhuma das respostas publicadas em 01/06/2018, com exceção da linha de comando única publicada por foxidrive , realmente excluiu todos os arquivos e todas as pastas / diretórios do Windows%PathToFolder% . Essa é a razão para postar mais uma resposta com uma linha de comando única muito simples para excluir todos os arquivos e subpastas de uma pasta, bem como um arquivo em lotes com uma solução mais complexa, explicando por que todas as outras respostas foram publicadas em 01/06/2018 usando DEL e FOR com RD falhou ao limpar uma pasta completamente.


A solução simples de linha de comando simples que, é claro, também pode ser usada em um arquivo em lotes:

pushd "%PathToFolder%" 2>nul && ( rd /Q /S "%PathToFolder%" 2>nul & popd )

Esta linha de comando contém três comandos executados um após o outro.

O primeiro comando PUSHD coloca o caminho do diretório atual na pilha e, em seguida, cria%PathToFolder% o diretório atual para a execução do processo de comando.

Isso funciona também para caminhos UNC por padrão, porque as extensões de comando são ativadas por padrão e, nesse caso, o PUSHD cria uma letra de unidade temporária que aponta para o recurso de rede especificado e altera a unidade e o diretório atuais, usando a letra da unidade recém-definida.

PUSHD gera a seguinte mensagem de erro para manipular STDERR se o diretório especificado não existir:

O sistema não consegue encontrar o caminho especificado.

Essa mensagem de erro é suprimida, redirecionando-a 2>nulpara o dispositivo NUL .

O próximo comando RD é executado apenas se a troca do diretório atual do processo de comando atual para o diretório especificado for bem-sucedida, ou seja, o diretório especificado existe.

O comando RD com as opções /Qe /Sremove um diretório silenciosamente com todos os subdiretórios, mesmo que o diretório especificado contenha arquivos ou pastas com atributo oculto ou com conjunto de atributos somente leitura. O atributo do sistema nunca impede a exclusão de um arquivo ou pasta.

Não excluídos são:

  1. Pastas usadas como o diretório atual para qualquer processo em execução. A árvore inteira de pastas dessa pasta não pode ser excluída se uma pasta for usada como o diretório atual para qualquer processo em execução.

  2. Arquivos atualmente abertos por qualquer processo em execução com permissões de acesso a arquivos definidas no arquivo aberto para impedir a exclusão do arquivo enquanto aberto pelo aplicativo / processo em execução. Esse arquivo aberto impede também a exclusão de toda a árvore de pastas no arquivo aberto.

  3. Arquivos / pastas nos quais o usuário atual não possui as permissões (NTFS) necessárias para excluir o arquivo / pasta, o que impede também a exclusão da árvore de pastas nesse arquivo / pasta.

O primeiro motivo para não excluir uma pasta é usado por esta linha de comando para excluir todos os arquivos e subpastas da pasta especificada, mas não a própria pasta. A pasta é transformada temporariamente no diretório atual para a execução do processo de comando, o que impede a exclusão da própria pasta. Obviamente, isso resulta na saída de uma mensagem de erro pelo comando RD :

O processo não pode acessar o arquivo porque está sendo usado por outro processo.

Arquivo é o termo errado aqui, pois, na realidade, a pasta está sendo usada por outro processo, o processo de comando atual que executou o comando RD . Bem, na realidade, uma pasta é para o sistema de arquivos um arquivo especial com diretório de atributos de arquivo que explica essa mensagem de erro. Mas não quero me aprofundar no gerenciamento do sistema de arquivos.

Essa mensagem de erro, como todas as outras mensagens de erro, que podem ocorrer devido aos três motivos mencionados acima, é suprimida, redirecionando-a 2>nuldo identificador STDERR para o dispositivo NUL .

O terceiro comando, POPD , é executado independentemente do valor de saída do comando RD .

O POPD exibe o caminho do diretório pressionado por PUSHD da pilha e altera o diretório atual para executar o processo de comando nesse diretório, ou seja, restaura o diretório atual inicial. O POPD exclui a letra da unidade temporária criada por PUSHD no caso de um caminho de pasta UNC.

Nota: O POPD pode silenciosamente falhar ao restaurar o diretório atual inicial, caso o diretório atual inicial tenha sido um subdiretório do diretório a ser limpo, o que não existe mais. Nesse caso especial, %PathToFolder%permanece o diretório atual. Portanto, é aconselhável executar a linha de comando acima, não a partir de um subdiretório de %PathToFolder%.

Mais um fato interessante : tentei a linha de comando também usando um caminho UNC compartilhando o diretório local C:\Tempcom o nome do compartilhamento Tempe usando o caminho UNC \\%COMPUTERNAME%\Temp\CleanTestatribuído à variável de ambiente PathToFolderno Windows 7. Se o diretório atual na execução da linha de comando for um subdiretório de um local compartilhado A pasta acessada usando o caminho UNC, ou seja C:\Temp\CleanTest\Subfolder1, Subfolder1é excluída pelo RD , e o próximo POPD falha silenciosamente ao criar C:\Temp\CleanTest\Subfolder1novamente o diretório atual, resultando em Z:\CleanTestpermanecer como o diretório atual do processo de comando em execução. Portanto, nesse caso muito, muito especial, a letra da unidade temporária permanece até que o diretório atual seja alterado, por exemplo, comcd /D %SystemRoot%para um diretório local realmente existente. Infelizmente, o POPD não sai com um valor maior 0 se não conseguir restaurar o diretório atual inicial, impossibilitando a detecção dessa condição de erro muito especial usando apenas o código de saída do POPD . No entanto, pode-se supor que ninguém nunca encontre esse caso de erro muito especial, pois os caminhos UNC geralmente não são usados ​​para acessar arquivos e pastas locais.

Para entender ainda melhor os comandos usados, abra uma janela de prompt de comandos, execute os seguintes comandos e leia a ajuda exibida para cada comando com muito cuidado.

  • pushd /?
  • popd /?
  • rd /?

Linha única com vários comandos usando o arquivo em lotes do Windows explica os operadores &&e &usados ​​aqui.


Em seguida, vejamos a solução de arquivos em lote usando o comando DEL para excluir arquivos %PathToFolder%e FOR e RD para excluir as subpastas %PathToFolder%.

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem Clean the folder for temporary files if environment variable
rem PathToFolder is not defined already outside this batch file.
if not defined PathToFolder set "PathToFolder=%TEMP%"

rem Remove all double quotes from folder path.
set "PathToFolder=%PathToFolder:"=%"

rem Consisted the folder path only of double quotes?
if not defined PathToFolder goto EndCleanFolder

rem Remove a backslash at end of folder path.
if "%PathToFolder:~-1%" == "\" set "PathToFolder=%PathToFolder:~0,-1%"

rem Consisted folder path only of a backslash (with one or more double quotes)?
if not defined PathToFolder goto EndCleanFolder

rem Delete all files in specified folder including files with hidden
rem or read-only attribute set, except the files currently opened by
rem a running process which prevents deletion of the file while being
rem opened by the application, or on which the current user has not
rem the required permissions to delete the file.
del /A /F /Q "%PathToFolder%\*" >nul 2>nul

rem Delete all subfolders in specified folder including those with hidden
rem attribute set recursive with all files and subfolders, except folders
rem being the current directory of any running process which prevents the
rem deletion of the folder and all folders above, folders containing a file
rem opened by the application which prevents deletion of the file and the
rem entire folder structure to this file, or on which the current user has
rem not the required permissions to delete a folder or file in folder tree
rem to delete.
for /F "eol=| delims=" %%I in ('dir "%PathToFolder%\*" /AD /B 2^>nul') do rd /Q /S "%PathToFolder%\%%I" 2>nul

:EndCleanFolder
endlocal

O arquivo em lotes primeiro garante que a variável de ambiente PathToFolderseja realmente definida com um caminho de pasta sem aspas duplas e sem uma barra invertida no final. A barra invertida no final não seria um problema, mas as aspas duplas no caminho de uma pasta podem ser problemáticas, pois o valor de PathToFolderé concatenado com outras seqüências durante a execução do arquivo em lotes.

Importante são as duas linhas:

del /A /F /Q "%PathToFolder%\*" >nul 2>nul
for /F "eol=| delims=" %%I in ('dir "%PathToFolder%\*" /AD /B 2^>nul') do rd /Q /S "%PathToFolder%\%%I" 2>nul

O comando DEL é usado para excluir todos os arquivos no diretório especificado.

  • A opção /Aé necessária para o processo de realmente todos os arquivos, incluindo arquivos com o atributo escondido que DEL iria ignorar sem o uso de opção /A.
  • A opção /Fé necessária para forçar a exclusão de arquivos com o conjunto de atributos somente leitura.
  • A opção /Qé necessária para executar uma exclusão silenciosa de vários arquivos sem avisar o usuário se vários arquivos devem ser realmente excluídos.
  • >nulé necessário redirecionar a saída dos nomes de arquivo gravados para manipular STDOUT para o dispositivo NUL, que não pode ser excluído porque um arquivo está aberto no momento ou o usuário não tem permissão para excluir o arquivo.
  • 2>nulé necessário redirecionar a saída da mensagem de erro para cada arquivo que não pode ser excluído do identificador STDERR para o dispositivo NUL .

Os comandos FOR e RD são usados ​​para remover todos os subdiretórios no diretório especificado. Mas for /Dnão é usado porque FOR está ignorando, neste caso, subdiretórios com o conjunto de atributos ocultos. Por esse motivo, for /Fé usado para executar a seguinte linha de comando em um processo de comando separado iniciado em segundo plano com %ComSpec% /c:

dir "%PathToFolder%\*" /AD /B 2>nul

DIR produz em formato simples por causa das /Bentradas de diretório com atributo D, ou seja, os nomes de todos os subdiretórios no diretório especificado, independentes de outros atributos, como o atributo oculto sem um caminho. 2>nulé usado para redirecionar a mensagem de erro emitida pelo DIR em nenhum diretório encontrado do identificador STDERR para o dispositivo NUL .

O operador de redirecionamento >deve ser escapado com o caractere de intercalação ^, na linha de comando FOR para ser interpretado como um caractere literal quando o interpretador de comando do Windows processar essa linha de comando antes de executar o comando FOR que executa a dirlinha de comando incorporada em um processo de comando separado iniciado no fundo.

FOR processa a saída capturada gravada para manipular STDOUT de um processo de comando iniciado, que são os nomes dos subdiretórios sem caminho e nunca são colocados entre aspas duplas.

A opção FOR with /Fignora as linhas vazias que não ocorrem aqui, pois o DIR with option /Bnão gera linhas vazias.

FOR também ignoraria as linhas começando com um ponto-e-vírgula, que é o caractere de fim de linha padrão. Um nome de diretório pode começar com um ponto e vírgula. Por esse motivo, eol=|é usado para definir o caractere da barra vertical como o caractere de fim de linha que nenhum diretório ou arquivo pode ter em seu nome.

FOR dividiria a linha em substrings usando espaço e tab horizontal como delimitadores e atribuiria apenas a primeira string delimitada por espaço / tabulação à variável de loop especificada I. Esse comportamento de divisão não é desejado aqui porque um nome de diretório pode conter um ou mais espaços. Portanto, delims=é usado para definir uma lista vazia de delimitadores para desativar o comportamento de divisão de linha e ser atribuído à variável de loop I, sempre o nome completo do diretório.

O comando FOR executa o comando RD para cada nome de diretório sem um caminho, motivo pelo qual, na linha de comando do RD , o caminho da pasta deve ser especificado novamente, o que é concatenado com o nome da subpasta.

Para entender os comandos usados ​​e como eles funcionam, abra uma janela do prompt de comandos, execute os comandos a seguir e leia inteiramente todas as páginas de ajuda exibidas para cada comando com muito cuidado.

  • del /?
  • dir /?
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • rd /?
  • rem /?
  • set /?
  • setlocal /?
Mofi
fonte
5

Use o bloco de notas para criar um documento de texto e copiar / colar o seguinte:

rmdir /s/q "%temp%"
mkdir "%temp%"

Selecione Salvar como e nome do arquivo:

delete_temp.bat

Salvar como tipo: Todos os arquivos e clique no Savebotão

Funciona em qualquer tipo de conta (administrador ou usuário padrão). Apenas corra!

Eu uso uma variável temporária neste exemplo, mas você pode usar qualquer outra! PS: Apenas para o sistema operacional Windows!

Filip Gjorgjevikj
fonte
uma solução bastante fácil e limpa
Carlos Liu
4

Para excluir o arquivo:

del PATH_TO_FILE

Para excluir uma pasta com todos os arquivos:

rmdir /s /q PATH_TO_FOLDER

Excluir todos os arquivos de uma pasta específica (sem excluir a própria pasta) é um pouco complicado. del /s *.*não pode excluir pastas, mas remove arquivos de todas as subpastas. Portanto, são necessários dois comandos:

del /q PATH_TO_FOLDER\*.*
for /d %i in (PATH_TO_FOLDER\*.*) do @rmdir /s /q "%i"
Maxim Suslov
fonte
Sim isto está correcto. Devem ser duas etapas. Isso merece mais votos, porque explica o porquê, em comparação com uma resposta mais votada acima.
WesternGun
A linha de comando DEL perde a opção /Ade excluir também arquivos com conjunto de atributos ocultos e a opção /Fde excluir também arquivos com conjunto de atributos somente leitura e aspas duplas em torno do último argumento. Então del /A /F /Q "PATH_TO_FOLDER\*"seria melhor. E a linha de comando FOR deve ser modificada para FORfor /F "eol=| delims=" %%I in ('dir "PATH_TO_FOLDER\*" /AD /B 2^>nul') do rd /Q /S "PATH_TO_FOLDER\%%I" porque ignora diretórios com conjunto de atributos ocultos. O DIR com opções gera todos os diretórios apenas com seus nomes. /AD /BPATH_TO_FOLDER
Mofi
Qual é a diferença entre (algumas das) respostas anteriores?
Peter Mortensen
4

Você pode fazer isso usando o seguinte comando para excluir todo o conteúdo e a própria pasta pai:

RMDIR [/S] [/Q] [drive:]path            
Ripon Al Wasim
fonte
Como isso difere das duas respostas anteriores?
Peter Mortensen
Esta resposta atende ao requisito "pode ​​haver um erro como 'este arquivo / pasta já está em uso' ... quando isso acontece, ele deve apenas continuar e pular esse arquivo / pasta". ?
Peter Mortensen
1

Eu tentei várias dessas abordagens, mas nenhuma funcionou corretamente.

Encontrei essa abordagem em duas etapas no site Windows Command Line :

forfiles /P %pathtofolder% /M * /C "cmd /c if @isdir==FALSE del @file"

forfiles /P %pathtofolder%  /M * /C "cmd /c if @isdir==TRUE rmdir /S /Q @file"

Funcionou exatamente como eu precisava e conforme especificado pelo OP.

Paul Haan
fonte
As duas linhas de comando podem ser combinadas com uma linha de comando: a opção forfiles /P "%pathtofolder%" /M * /C "%SystemRoot%\System32\cmd.exe /C if @isdir==FALSE (del /A /F @file) else rd /Q /S @file" DEL/A é adicionada para excluir também arquivos com atributo oculto definido, caso contrário, o DEL exibirá uma mensagem de erro não encontrada para cada arquivo oculto %pathtofolder%. A opção DEL/F foi adicionada para excluir também os arquivos com o atributo somente leitura definido %pathtofolder%, caso contrário, DEL produziria uma mensagem de erro de acesso negado.
Mofi
Essa solução é a mais lenta de todas as soluções incompletas postadas aqui devido ao início de uma cmd.exeinstância para cada arquivo e diretório em %pathtofolder%. A vantagem é que FORFILES não ignora diretórios com atributos ocultos definidos como FOR .
Mofi
Re "Funcionou exatamente como eu precisava e conforme especificado pelo OP". : Você testou o requisito "pode ​​haver um erro como 'este arquivo / pasta já está em uso' ... quando isso acontece, ele deve apenas continuar e pular esse arquivo / pasta". ?
Peter Mortensen
0
@ECHO OFF
rem next line removes all files in temp folder
DEL /A /F /Q /S "%temp%\*.*"
rem next line cleans up the folder's content
FOR /D %%p IN ("%temp%\*.*") DO RD "%%p" /S /Q
Robie
fonte
A segunda linha removerá os arquivos em cada arquivo de todas as pastas no diretório temporário do Windows e a terceira linha limpará os diretórios, incluindo seu conteúdo.
Robie
A linha de comando FOR deve ser modificada para for /F "eol=| delims=" %%I in ('dir "%TEMP%\*" /AD /B 2^>nul') do rd /Q /S "%TEMP%\%%I"por causa de FOR ignora diretórios com conjunto de atributos ocultos. O DIR com opções /AD /Bgera todos os diretórios %TEMP%apenas com seus nomes.
Mofi
Documentação para DEL . Eu acho que você está no caminho certo com / F: "Ignorar configuração somente leitura e excluir de qualquer maneira (FORCE)"
Peter Mortensen
-10

Usar:

del %pathtofolder%\*.*   /s /f  /q

Isso exclui todos os arquivos e subpastas %pathtofolder%, incluindo arquivos somente leitura, e não solicita confirmação.

Alon
fonte
9
Para mim, isso deixa subpastas vazias em% pathtofolder%.
DH
35
NÃO exclui subpastas em% pathtofolder%. Tão ruim que eu não tenho a reputação de votar contra esta falsa resposta
Vitalii Korsakov
1
Conforme apontado por Vitalii Korsakov, isso exclui todos os arquivos e subdiretórios, mas deixa os subdiretórios no local que o OP perguntou como remover também.
Fuzz Evans
6
Embora esse comando deixe pastas vazias, é muito mais próximo do que foi solicitado, do que a resposta aceita. Claro que isso depende das circunstâncias. No meu caso, eu preferiria ter pastas vazias do que arquivos deixados no diretório raiz.
MarcusUA
mas como podemos excluir pastas e subpastas que estavam abertas no compartilhamento de rede quando outra máquina cliente abrir a unidade de compartilhamento com acesso de gravação a essa pasta. O comando psfile e net files fechará a sessão do arquivo, mas novamente após alguns segundos, ele criará automaticamente outra sessão para esse usuário no servidor ...
user1954762