Estou fazendo um script em lote e parte do script está tentando remover um diretório e todos os seus subdiretórios. Estou recebendo um erro intermitente sobre um subdiretório não estar vazio. Eu li um artigo sobre a indexação ser a culpada. Desativei o WSearch, mas acabei recebendo o erro novamente. Aqui está o comando:
rmdir /S /Q "C:\<dir>\"
windows
batch-file
Mayhem
fonte
fonte
Respostas:
Eu experimentei os mesmos problemas que Harry Johnston mencionou.
rmdir /s /q
reclamaria que um diretório não estava vazio, embora/s
seja para fazer o esvaziamento para você! Acho que é um bug do Windows, pessoalmente.Minha solução alternativa é
del
tudo no diretório antes de excluir o próprio diretório:(O
1>nul
oculta a saída padrãodel
porque, do contrário, lista todos os arquivos que exclui.)fonte
mydir
produziram o mesmo erro "não está vazio". Então eu tive quecd
entrarmydir
e executar odel
nos arquivos em cada um desses diretórios também. No final das contas funcionou, mas se eu tivesse que repetir o processo uma terceira vez em outro subnível, me sentiria muito derrotado.del /s
faz.rd /s /q mydir
comando.Estou familiarizado com este problema. A solução mais simples é repetir condicionalmente a operação. Nunca vi ele falhar duas vezes seguidas - a menos que realmente haja um arquivo aberto ou um problema de permissão, obviamente!
fonte
IF EXIST
escondeAccess is denied
e outras situações. Eu adicionei algo parecidoDIR c:\deleteme
e verificação de erros antes de tudo.Acabei de encontrar o mesmo problema e tinha a ver com alguns arquivos sendo perdidos ou corrompidos. Para corrigir o problema, basta executar a verificação do disco:
Isso pode ser executado a partir da caixa da janela de pesquisa ou de um prompt do cmd. O
/F
corrige todos os problemas encontrados, como a recuperação de arquivos. Assim que terminar a execução, você pode excluir os arquivos e pastas normalmente.fonte
entre no Prompt de Comando como Admin e execute
fonte
Eu tive um problema semelhante, tentei excluir uma pasta vazia através do Windows Explorer. Me mostrou o erro não vazio, então pensei em tentar via admin cmd, mas nenhuma das respostas aqui ajudou.
Depois de mover um arquivo para a pasta vazia. Consegui deletar a pasta não vazia
fonte
Como @gfullam afirmou em um comentário à resposta de @BoffinbraiN, o que
<dir>
você está excluindo pode não ser aquele que contém os arquivos: pode haver subdiretórios<dir>
que recebam uma mensagem "O diretório não está vazio" e a única solução seria itere recursivamente sobre os diretórios, excluindo manualmente todos os seus arquivos contidos ... Acabei decidindo usar uma porta derm
do UNIX.rm.exe
vem com Git Bash, MinGW, Cygwin, GnuWin32 e outros. Você só precisa ter seu diretório pai em seu PATH e, em seguida, executar como faria em um sistema UNIX.Exemplo de script em lote:
fonte
O que funcionou para mim é o seguinte. Parece que o comando RMDir emitirá “O diretório não está vazio” quase o tempo todo ...
fonte
Eu tinha "C: \ Usuários \ Nome do usuário \ OneDrive \ Fonts", que foi mklink'ed (/ D) para "C: \ Windows \ Fonts" e tive o mesmo problema. No meu caso
me ajudou. Espero que isso ajude você também; D
fonte
Im meu caso, acabei de mover a pasta para o diretório raiz assim.
E então executei o comando para remover o diretório
fonte
rmdir c:\<moved directory> /s /q
é a resposta corretaO motivo da
rd /s
recusa em excluir certos arquivos é provavelmente devido aos atributos READONLY nos arquivos do diretório.A maneira adequada de corrigir isso é certificar-se de redefinir os atributos em todos os arquivos primeiro:
Pode haver outros, como arquivos ocultos ou de sistema, portanto, se você quiser se proteger:
fonte
Semelhante à resposta de Harry Johnston, faço um loop até que funcione.
fonte
Às vezes, o Windows está "quebrado por design", então você precisa criar uma pasta vazia e, em seguida, espelhar a "pasta quebrada" com uma "pasta vazia" com modo de backup.
Crie um diretório vazio como este:
sobrescrever pasta quebrada com vazio como este:
e, em seguida, exclua essa pasta
Se isso não ajudar, tente reiniciar no "modo de recuperação com prompt de comando" segurando a tecla shift ao clicar em reiniciar e tentar executar esses comandos novamente no modo de recuperação
fonte
/W:0
para evitar atrasos desnecessários. Você pode não querer/b
porque isso requer privilégios administrativos. O modo de recuperação não é relevante para esta questão, porque estamos falando de um script em lote, não de alguém tentando remover manualmente um diretório.Posso pensar nas seguintes causas possíveis:
Para 1.) você pode tentar
runas /user:Administrator
obter privilégios mais altos ou iniciar o arquivo em lote como administrador através do menu de contexto. Se isso não ajudar, talvez até o administrador não tenha os direitos. Em seguida, você precisa assumir a propriedade do diretório.Para 2.) faça download do Process Explorer , clique
Find/Find handle or DLL...
ou pressione Ctrl+F, digite o nome do diretório e descubra quem o usa. Feche o aplicativo que usa o diretório, se possível.fonte