script - ¿"Rm-rf" equivalente para Windows?
wscript.exe windows 10 (17)
Aquí está lo que tú necesitas hacer...
Crea un archivo por lotes con la siguiente línea
RMDIR /S %1
Guarde su archivo por lotes como Remove.bat
y póngalo en C:/windows
Crea la siguiente clave de registro
HKEY_CLASSES_ROOT/Directory/shell/Remove Directory (RMDIR)
Inicie regedit
y actualice el valor predeterminado HKEY_CLASSES_ROOT/Directory/shell/Remove Directory (RMDIR)/default
con el siguiente valor
"c:/windows/REMOVE.bat" "%1"
¡Eso es! Ahora puede hacer clic derecho en cualquier directorio y usar la función RMDIR
Necesito una forma de eliminar recursivamente una carpeta y sus hijos.
¿Hay una herramienta precompilada para esto, o necesito escribir una?
DEL /S
no borra directorios.
DELTREE
se eliminó de Windows 2000+
Esto eliminará "mi carpeta" y su contenido sin aviso:
rd /s /q "C:/Users/jerry.g/AppData/Roaming/my folder"
Esto es lo que funcionó para mí:
Solo intenta disminuir la longitud del camino. es decir: :: Cambie el nombre de todas las carpetas que llevan a dicho archivo a los nombres más pequeños posibles. Di los nombres de una letra. Ir renombrando hacia arriba en la jerarquía de carpetas. Por esto, efectivamente, reduce la longitud del camino. Ahora finalmente intente borrar el archivo de inmediato.
Para eliminar un directorio (ya sea que exista o no) use lo siguiente:
if exist myfolder ( rmdir /s/q myfolder )
Primero, rm -rf
hace rm -rf
:
C:/Users/ohnob/things>touch stuff.txt
C:/Users/ohnob/things>rm -rf stuff.txt
C:/Users/ohnob/things>mkdir stuff.txt
C:/Users/ohnob/things>rm -rf stuff.txt
C:/Users/ohnob/things>ls -l
total 0
C:/Users/ohnob/things>rm -rf stuff.txt
Hay tres escenarios donde rm -rf
se usa comúnmente donde se espera que devuelva 0
:
- La ruta especificada no existe.
- La ruta especificada existe y es un directorio.
- La ruta especificada existe y es un archivo.
Voy a ignorar todo lo relacionado con los permisos, pero de todos modos nadie usa los permisos ni trata de negarse el acceso de escritura a las cosas en Windows (está bien, eso es una broma ...).
Primero establezca ERRORLEVEL
en 0 y luego elimine la ruta solo si existe, usando diferentes comandos dependiendo de si es un directorio o no. IF EXIST
no establece ERRORLEVEL
en 0 si la ruta no existe, por lo que primero es necesario establecer ERRORLEVEL
en 0 para detectar correctamente el éxito de una manera que imite el uso normal de rm -rf
. Proteger el RD
con IF EXIST
es necesario porque RD
, a diferencia de rm -f
, generará un error si el objetivo no existe.
El siguiente fragmento de script asume que DELPATH está precoteado. (Esto es seguro cuando haces algo como SET DELPATH=%1
Intenta colocar ECHO %1
en un .cmd
y pasarle un argumento con espacios y ver qué sucede por ti mismo). Una vez que se completa el fragmento, puede comprobar si hay un error con IF ERRORLEVEL 1
.
: # Determine whether we need to invoke DEL or RD or do nothing.
SET DELPATH_DELMETHOD=RD
PUSHD %DELPATH% 2>NUL
IF ERRORLEVEL 1 (SET DELPATH_DELMETHOD=DEL) ELSE (POPD)
IF NOT EXIST %DELPATH% SET DELPATH_DELMETHOD=NOOP
: # Reset ERRORLEVEL so that the last command which
: # otherwise set it does not cause us to falsely detect
: # failure.
CMD /C EXIT 0
IF %DELPATH_DELMETHOD%==DEL DEL /Q %DELPATH%
IF %DELPATH_DELMETHOD%==RD RD /S /Q %DELPATH%
El punto es que todo es más simple cuando el entorno se ajusta a POSIX. O si instala un mínimo de MSYS y simplemente use eso.
Pruebe este comando:
del /s foldername
Puede instalar GnuWin32 y usar los comandos * nix de forma nativa en Windows. Instalo esto antes de instalar cualquier otra cosa en una copia nueva de Windows. :)
Puede instalar cygwin, que tiene rm
así como ls
etc.
RMDIR o RD si está utilizando el símbolo del sistema clásico (cmd.exe):
rd /s /q "path"
Si está usando PowerShell, puede usar Remove-Item
(que tiene un alias para erase
, erase
, rd
, ri
, rm
y rmdir
) y toma un argumento -Recurse
que se puede acortar a -r
rd -r "path"
También hay deltree si está en una versión anterior de Windows.
Realmente me gusta este sitio para encontrar comandos: SS64: Del - Eliminar archivos
Utilizando Powershell 5.1
get-childitem *logs* -path ./ -directory -recurse | remove-item -confirm:$false -recurse -force
Reemplace los registros con el nombre del directorio que desea eliminar.
get-childitem busca el directorio de hijos con el nombre recursivamente de la ruta actual (.).
remove-item borra el resultado.
Ve a la ruta y activa este comando.
rd /s /q "FOLDER_NAME"
/ s: elimina el directorio especificado y todos los subdirectorios, incluidos los archivos. Utilice / s para eliminar un árbol.
/ q: ejecuta rmdir en modo silencioso. Borra directorios sin confirmación.
/? : Muestra ayuda en el símbolo del sistema.
administración:
takeown /r /f folder
cacls folder /c /G "ADMINNAME":F /T
rmdir /s folder
Funciona para cualquier cosa, incluyendo archivos sys
EDITAR: De hecho, encontré la mejor manera que también resuelve el problema de la ruta del archivo también:
mkdir /empty
robocopy /mir /empty folder
del / s / q directorytobedeleted
rmdir / s dirname
RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path
/S
Elimina todos los directorios y archivos en el directorio especificado además del propio directorio. Se utiliza para eliminar un árbol de directorios./Q
Modo silencioso, no pregunte si está bien para eliminar un árbol de directorios con/S
rmdir /S /Q %DIRNAME%