web-dev-qa-db-fra.com

Comment supprimer des dossiers vides à l'aide de l'invite de commande Windows?

J'ai besoin de supprimer tous les dossiers vides de mon dossier d'application à l'aide de l'invite de commande Windows?

Comment créer un fichier chauve-souris comme ça?

Aidez-moi, s'il vous plaît.

65
learner
for /f "usebackq" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d"

à partir de: http://blogs.msdn.com/b/oldnewthing/archive/2008/04/17/8399914.aspx

Bien sûr, je le testerais d'abord sans supprimer avant de faire cette commande. En outre, voici une version moddée à partir des commentaires qui inclut des dossiers avec des espaces:

 for /f "usebackq delims=" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d"

P.S. Il y a plus de commentaires dans le billet de blog qui pourraient vous aider alors assurez-vous de les lire aussi avant de l'essayer.

49
corroded

Vous pouvez utiliser ROBOCOPY. Il est très simple et peut également être utilisé pour supprimer des dossiers vides dans une grande hiérarchie.

ROBOCOPY folder1 folder1 /S /MOVE

Ici, la source et la destination sont folder1, car il vous suffit de supprimer les dossiers vides, au lieu de déplacer d'autres fichiers (obligatoires) dans un autre dossier. L'option /S consiste à ignorer la copie (déplacement - dans le cas ci-dessus) de dossiers vides. Il est également plus rapide que les fichiers sont déplacés à l'intérieur du même lecteur.

112
Varun Sharma

Un moyen plus simple consiste à utiliser xcopy pour copier l'intégralité de la structure du répertoire à l'aide du commutateur/s. help for/s dit Copie les répertoires et les sous-répertoires, sauf les répertoires vides.

xcopy dirA dirB /S

où dirA est la source avec les dossiers vides. DirB sera la copie sans dossiers vides

56
Dinesh Rajan

Vous n'avez pas besoin de usebackq:

FOR /F delims^= %%A IN ('DIR/AD/B/S^|SORT/R') DO RD "%%A"
15
tomasz86

La version corrigée de la même page référencée est complétée par une version de PowerShell http://blogs.msdn.com/b/oldnewthing/archive/2008/04/17/8399914.aspx#8408736

Get-ChildItem -Recurse . | where { $_.PSISContainer -and @( $_ | Get-ChildItem ).Count -eq 0 } | Remove-Item

ou, plus sommairement,

gci -R . | where { $_.PSISContainer -and @( $_ | gci ).Count -eq 0 } | ri

le crédit revient à l'auteur du message

8
BozoJoe

à partir de la ligne de commande: pour/R/D% 1 dans (*) faire "% 1"

dans un fichier batch .__pour/R/D %% 1 in (*) do "" %% 1 "

Je ne sais pas si c'est documenté en tant que tel, mais cela fonctionne dans W2K, XP et Win 7. Et je ne sais pas si cela fonctionnera toujours, mais il ne supprimera jamais les fichiers par accident.

Ceci est un hybride de ce qui précède. Il supprime TOUS les fichiers de plus de X jours et tous les dossiers vides du chemin indiqué. Pour utiliser simplement définir les jours, le chemin du dossier et le lecteur

@echo off
SETLOCAL
set days=30
set folderpath=E:\TEST\
set drive=E:

::Delete files
forfiles -p %folderpath% -s -d -%days% -c "cmd /c del /q @path "

::Delete folders
cd %folderpath%
%drive%
for /f "usebackq delims=" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d"`
2
jcwhall

Installez n'importe quel interpréteur UNIX pour Windows (Cygwin ou Git Bash) et lancez le cmd:

find/path/to/directory -empty -type d 

To find them

find/path/to/directory -empty -type d -delete 

To delete them

(pas vraiment en utilisant l'invite Windows cmd mais c'est facile et a pris quelques secondes pour s'exécuter)

1
GreAce
@echo off
set /p "ipa= ENTER FOLDER NAME TO DELETE> "
set ipad="%ipa%"
IF not EXIST %ipad% GOTO notfound
IF EXIST %ipad% GOTO found
:found
echo DONOT CLOSE THIS WINDOW
md ccooppyy
xcopy %ipad%\*.* ccooppyy /s > NUL
rd %ipad% /s /q
ren ccooppyy %ipad%
cls
echo SUCCESS, PRESS ANY KEY TO EXIT
pause > NUL
exit 
:notfound
echo I COULDN'T FIND THE FOLDER %ipad%
pause
exit
0
PRADEESH

Cela fonctionnera bien. C'est le meilleur moyen de supprimer les anciens fichiers et de supprimer les répertoires vides de manière récursive. Le fichier .bat suivant est, 

forfiles /p [PATH] /s /m [FILE-PATTERN] /d -[DAYS] /c "cmd /c del @path"
for /f "delims=" %%d in ('dir [PATH] /s /b /ad ^| sort /r') do rd "%%d"

Les espaces réservés doivent être remplacés comme suit (sans les guillemets):

[DAYS] = Max. age of the files in days, e.g. “10”
[PATH] = Path to search for old files and empty folders, e.g. “C:\Backup\”
[FILE-PATTERN] = Pattern that matches files to delete, e.g. “*.bkp”

Le script a été testé avec succès sous Windows 7 et Windows Server 2003.

0
sathish anish