J'utilise Windows.
Je souhaite supprimer tous les fichiers et dossiers d'un dossier par appel système.
Je peux appeler comme ça:
>rd /s /q c:\destination
>md c:\destination
Connaissez-vous un moyen plus facile?
Non, je n'en connais pas.
Si vous souhaitez conserver le répertoire d'origine pour une raison quelconque (ACL, etc.) et souhaitez plutôt le vider, vous pouvez procéder comme suit:
del /q destination\*
for /d %x in (destination\*) do @rd /s /q "%x"
Cela supprime d'abord tous les fichiers du répertoire, puis tous les répertoires imbriqués de manière récursive, tout en maintenant le répertoire de niveau supérieur tel quel (à l'exception de son contenu).
Notez que dans un fichier de commandes, vous devez doubler le %
dans la boucle for
:
del /q destination\*
for /d %%x in (destination\*) do @rd /s /q "%%x"
del c:\destination\*.* /s /q
a travaillé pour moi. J'espère que cela fonctionne pour vous aussi.
Je pense que le moyen le plus simple de le faire est:
rmdir /s /q "C:\FolderToNotToDelete\"
Le dernier "\" dans le chemin est la partie importante.
Si les noms de sous-dossiers peuvent contenir des espaces, vous devez les entourer de guillemets. L'exemple suivant montre cela pour les commandes utilisées dans un fichier de commandes.
set targetdir=c:\example
del /q %targetdir%\*
for /d %%x in (%targetdir%\*) do @rd /s /q ^"%%x^"
Oui! Utilisez Powershell:
powershell -Command "Remove-Item 'c:\destination\*' -Recurse -Force"
Pour supprimer le fichier:
del PATH_TO_FILE
Pour supprimer un dossier contenant tous les fichiers:
rmdir /s /q PATH_TO_FOLDER
Supprimer tous les fichiers d'un dossier spécifique (ne pas supprimer le dossier lui-même) est un peu compliqué. del /s *.*
ne peut pas supprimer de dossiers, mais supprime les fichiers de tous les sous-dossiers. Donc, deux commandes sont nécessaires:
del /q PATH_TO_FOLDER\*.*
for /d %i in (PATH_TO_FOLDER\*.*) do @rmdir /s /q "%i"
Vous pouvez créer un script pour supprimer ce que vous voulez (dossier ou fichier) comme ceci: mydel.bat
:
@echo off
setlocal enableextensions
if "%~1"=="" (
echo Usage: %0 path
exit /b 1
)
:: check whether it is folder or file
set ISDIR=0
set ATTR=%~a1
set DIRATTR=%ATTR:~0,1%
if /i "%DIRATTR%"=="d" set ISDIR=1
:: Delete folder or file
if %ISDIR%==1 (rmdir /s /q "%~1") else (del "%~1")
exit /b %ERRORLEVEL%
Quelques exemples d'utilisation:
mydel.bat "path\to\folder with spaces"
mydel.bat path\to\file_or_folder
Une option simple en ligne consiste à créer un répertoire vide quelque part sur votre système de fichiers, puis à utiliser ROBOCOPY
( http://technet.Microsoft.com/en-us/library/cc733145.aspx ) avec le /MIR
commutateur pour supprimer tous les fichiers et sous-dossiers. Par défaut, robocopy ne copie pas la sécurité. Par conséquent, les listes de contrôle d'accès de votre dossier racine doivent rester intactes.
Vous souhaitez également probablement définir une valeur pour le commutateur de nouvelle tentative, /r
, car le nombre de tentatives par défaut est de 1 million.
robocopy "C:\DoNotDelete_UsedByScripts\EmptyFolder" "c:\temp\MyDirectoryToEmpty" /MIR /r:3
Accédez au répertoire parent
Supprimer les sous-dossiers
J'avais un dossier d'index avec 33 dossiers dans lequel tous les fichiers et sous-dossiers avaient été supprimés. J'ai ouvert une ligne de commande dans le dossier d'index et ensuite utilisé ces commandes:
for /d in (*) do rd /s /q "%a" & (
md "%a")
Je les ai séparés en deux lignes (appuyez sur Entrée après la première ligne, puis, lorsque vous en demandez plus, ajoutez une deuxième ligne), car si elle est entrée sur une seule ligne, cela risque de ne pas fonctionner. Cette commande effacera chaque répertoire, puis en créera un nouveau qui sera vide, supprimant ainsi tous les fichiers et sous-répertoires du répertoire d'origine.