Supprimer un dossier seulement s'il est vide - Solution batch sous Windows

Informatique et automatisation ~ 11 juin 2015 ~

Voici quelques lignes en batch permettant de supprimer un dossier, uniquement s'il est vide.

Un tel besoin peut survenir lorsque l'on souhaite automatiser la désinstallation d'un logiciel, par exemple.

Une solution en batch est d'opter pour une boucle for, sans omettre la recherche des éléments cachés et/ou 'système'. L'exemple suivant supprime le dossier déclaré dans la variable d'environnement DOSSIER définie au début du script. Ce script est à adapter aux besoins de chacun, bien sur.

@echo off
set DOSSIER=%ProgramFiles%\dossier
for /f "delims=" %%i in ('dir "%DOSSIER%" /b 2^>nul') do (if "%%i" neq "" goto suite)
for /f "delims=" %%i in ('dir "%DOSSIER%" /b /ah 2^>nul') do (if "%%i" neq "" goto suite)
for /f "delims=" %%i in ('dir "%DOSSIER%" /b /as 2^>nul') do (if "%%i" neq "" goto suite)

echo Suppression du dossier
rmdir /S /Q "%DOSSIER%"
goto fin

:suite
echo Le dossier n'est pas vide =^> je ne le supprime pas !

:fin
set DOSSIER=
exit /b

Si l'opération à effectuer est la dernière d'un script de désinstallation d'application par exemple, on peut réduire tout ce code à ces quelques lignes :

for /f "delims=" %%i in ('dir "%DOSSIER%" /b 2^>nul') do if "%%i" neq "" goto :eof
for /f "delims=" %%i in ('dir "%DOSSIER%" /b /ah 2^>nul') do if "%%i" neq "" goto :eof
for /f "delims=" %%i in ('dir "%DOSSIER%" /b /as 2^>nul') do if "%%i" neq "" goto :eof
rmdir /S /Q "%DOSSIER%"

♦ Le symbole ^ est un caractère d'échappement, permettant d'éviter l'interprétation immédiate du symbole >.