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.
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.
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.
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
Vous n'avez pas besoin de usebackq:
FOR /F delims^= %%A IN ('DIR/AD/B/S^|SORT/R') DO RD "%%A"
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
à 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"`
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)
@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
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.