Ich möchte alle Dateien und Unterordner in einer Batch-Datei in Windows 7 löschen und den obersten Ordner behalten. Grundsätzlich den Ordner leeren. Was ist die Befehlszeilenanweisung dafür?
quelle
Ich möchte alle Dateien und Unterordner in einer Batch-Datei in Windows 7 löschen und den obersten Ordner behalten. Grundsätzlich den Ordner leeren. Was ist die Befehlszeilenanweisung dafür?
Sie können dies mit del
und dem /S
Flag tun (um anzugeben, dass alle Dateien aus allen Unterverzeichnissen entfernt werden sollen):
del /S C:\Path\to\directory\*
Die beste Lösung: Ich möchte zB alle Dateien und Unterverzeichnisse des übergeordneten Verzeichnisses löschen. Sagen wir "C: \ Users \ Desktop \ New folder \". Der einfache Weg ist die Erstellung einer Batch-Datei mit drei Befehlen.
cd C: \ Benutzer \ Desktop \ Neuer Ordner \
del * / S / Q
rmdir / S / Q "C: \ Benutzer \ Desktop \ Neuer Ordner \"
Hier werden zuerst alle Dateien in allen Unterverzeichnissen und dann alle leeren Unterverzeichnisse gelöscht. Da das aktuelle Arbeitsverzeichnis das übergeordnete Verzeichnis ist, dh "\ Neuer Ordner", kann der Befehl rmdir dieses Verzeichnis nicht selbst löschen.
rmdir
Befehl gelöschtNew folder
Navigieren Sie zum übergeordneten Verzeichnis:
pushd "Parent Directory"
Löschen Sie die Unterordner:
rd /s /q . 2>nul
pushd
fügt hier nichts hinzu, was noch nicht erledigt cd
ist.
rmdir /s path-to-folder
wird der Ordner mit all dem Zeug darin gelöscht, aber der Fragesteller wollte wissen, wie man alles im Arbeitsverzeichnis löscht.
rmdir "c:\pathofyourdirectory" /q /s
Vergessen Sie nicht, die Anführungszeichen zu verwenden. /q /s
Dadurch werden alle Repositorys gelöscht, ohne dass Sie dazu aufgefordert werden.
Mit rmdir können Sie die Dateien und Unterordner wie folgt löschen:
rmdir /s/q MyFolderPath
Es ist jedoch wesentlich schneller, insbesondere wenn Sie viele Unterordner in Ihrer Struktur haben, um del vor dem rmdir zu verwenden, wie folgt:
del /f/s/q MyFolderPath > nul
rmdir /s/q MyFolderPath
rmdir
Befehl (beide sind gleich) löscht den übergeordneten Ordner. Dies ist keine Antwort auf die Frage. Warum lesen die Leute nicht?
Wenn Sie alle Dateien in einem Ordner löschen möchten, einschließlich aller Unterordner, und sich nicht auf einige Fehlerbedingungen verlassen möchten, um den Stammordner intakt zu halten (wie ich in einer anderen Antwort gesehen habe), könnten Sie eine Batch-Datei wie die folgende haben:
@echo off
REM Checking for command line parameter
if "%~1"=="" (
echo Parameter required.
exit /b 1
) else (
REM Change directory and keep track of the previous one
pushd "%~1"
if errorlevel 1 (
REM The directory passed from command line is not valid, stop here.
exit /b %errorlevel%
) else (
REM First we delete all files, including the ones in the subdirs, without confirmation
del * /S /Q
REM Then we delete all the empty subdirs that were left behind
for /f %%D IN ('dir /b /s /a:d "%~1"') DO rmdir /S /Q "%%D"
REM Change directory back to the previous one
popd
REM All good.
exit /b 0
)
)
Und dann würden Sie es einfach so nennen:
empty_my_folder.bat "C:\whatever\is\my folder"
Sie können dies schnell und einfach tun, indem Sie diese drei Anweisungen in Ihre Fledermausdatei einfügen:
mkdir empty_folder
robocopy /mir empty_folder "path_to_directory"
rmdir empty_folder
Dies funktionierte besser für mich, als ich Leerzeichen in den Ordnernamen hatte.
@echo off
REM ---- Batch file to clean out a folder
REM Checking for command line parameter
if "%~1"=="" (
echo Parameter required.
exit /b 1
) else (
echo ***********************************************************************************
echo *** Deleting all files, including the ones in the subdirs, without confirmation ***
del "%~1\*" /S /Q
echo ***********************************************************************************
REM Deleting all the empty subdirs that were left behind
FOR /R "%~1" %%D IN (.) DO (
if "%%D"=="%~1\." (
echo *** Cleaning out folder: %~1 ***
) else (
echo Removed folder "%%D"
rmdir /S /Q "%%D"
)
)
REM All good.
exit /b 0
)
So löschen Sie eine Datei:
del PATH_TO_FILE
So löschen Sie einen Ordner mit allen darin enthaltenen Dateien:
rmdir /s /q PATH_TO_FOLDER
Das Löschen aller Dateien aus einem bestimmten Ordner (nicht das Löschen des Ordners selbst) ist etwas kompliziert. del /s *.*
Ordner können nicht gelöscht werden, es werden jedoch Dateien aus allen Unterordnern entfernt. Es werden also zwei Befehle benötigt:
del /q PATH_TO_FOLDER\*.*
for /d %i in (PATH_TO_FOLDER\*.*) do @rmdir /s /q "%i"
Sie können ein Skript erstellen, um beliebige Elemente (Ordner oder Datei) wie folgt zu löschen 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%
Einige Anwendungsbeispiele:
mydel.bat "path\to\folder with spaces"
mydel.bat path\to\file_or_folder
Das hat bei mir funktioniert.
del *
Y
für ja.
ntvdm
aber wenn 64-Bit-Systeme Marktanteile gewinnen, wird es zunehmend irrelevant.