Me gustaría eliminar todos los archivos y subcarpetas en un archivo por lotes en Windows 7 y mantener la carpeta superior. Básicamente vaciar la carpeta. ¿Cuál es la instrucción de línea de comando para eso?
fuente
Me gustaría eliminar todos los archivos y subcarpetas en un archivo por lotes en Windows 7 y mantener la carpeta superior. Básicamente vaciar la carpeta. ¿Cuál es la instrucción de línea de comando para eso?
Puede hacer esto usando del
y el /S
indicador (para indicarle que elimine todos los archivos de todos los subdirectorios):
del /S C:\Path\to\directory\*
La mejor solución: por ejemplo, quiero eliminar todos los archivos y subdirectorios del directorio principal, digamos "C: \ Users \ Desktop \ New folder \". La manera fácil es crear un archivo por lotes de los siguientes tres comandos.
cd C: \ Users \ Desktop \ Nueva carpeta \
del * / S / Q
rmdir / S / Q "C: \ Users \ Desktop \ Nueva carpeta \"
Aquí primero limpiará todos los archivos en todos los subdirectorios y luego limpiará todos los subdirectorios vacíos. Dado que el directorio de trabajo actual es el directorio padre, es decir, "\ Nueva carpeta", el comando rmdir no puede eliminar este directorio en sí.
rmdir
comando eliminaráNew folder
Navegue al directorio principal:
pushd "Parent Directory"
Eliminar las subcarpetas:
rd /s /q . 2>nul
pushd
no agrega nada aquí que cd
ya no esté haciendo.
rmdir /s path-to-folder
, eliminará la carpeta con todo lo que contiene, pero el autor de la pregunta quería saber cómo eliminar todo en el directorio de trabajo.
rmdir "c:\pathofyourdirectory" /q /s
No olvide utilizar las comillas y para /q /s
ello eliminará todos los repositorios y sin preguntar.
puede usar rmdir para eliminar los archivos y la subcarpeta, de esta manera:
rmdir /s/q MyFolderPath
Sin embargo, es significativamente más rápido, especialmente cuando tiene muchas subcarpetas en su estructura para usar del antes del rmdir, así:
del /f/s/q MyFolderPath > nul
rmdir /s/q MyFolderPath
rmdir
comando (ambos son iguales) eliminará la carpeta principal. Esta no es una respuesta a la pregunta. ¿Por qué la gente no lee?
Si desea eliminar todos los archivos en una carpeta, incluidas todas las subcarpetas y no confiar en algunas condiciones de error para mantener la carpeta raíz intacta (como vi en otra respuesta), podría tener un archivo por lotes como este:
@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
)
)
Y luego simplemente lo llamarías con:
empty_my_folder.bat "C:\whatever\is\my folder"
Puede hacerlo de manera rápida y sencilla al poner estas tres instrucciones en su archivo bat:
mkdir empty_folder
robocopy /mir empty_folder "path_to_directory"
rmdir empty_folder
Esto funcionó mejor para mí cuando tenía espacios en los nombres de las carpetas.
@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
)
Para eliminar el archivo:
del PATH_TO_FILE
Para eliminar la carpeta con todos los archivos en ella:
rmdir /s /q PATH_TO_FOLDER
Eliminar todos los archivos de una carpeta específica (no eliminar la carpeta en sí) es un poco complicado. del /s *.*
no puede eliminar carpetas, pero elimina archivos de todas las subcarpetas. Entonces se necesitan dos comandos:
del /q PATH_TO_FOLDER\*.*
for /d %i in (PATH_TO_FOLDER\*.*) do @rmdir /s /q "%i"
Puede crear un script para eliminar lo que desee (carpeta o archivo) de esta manera 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%
Pocos ejemplos de uso:
mydel.bat "path\to\folder with spaces"
mydel.bat path\to\file_or_folder
Esto es lo que funcionó para mí.
del *
Y
por si.
ntvdm
pero a medida que los sistemas de 64 bits ganan cuota de mercado, cada vez es más irrelevante.