Puede eliminar archivos/directorios en masa con CMD o Powershell, pero hay opciones más rápidas

Puede eliminar archivos/directorios en masa con CMD o Powershell, pero hay opciones más rápidas

El script C sería más rápido

Cd /d “%PERFIL DE USUARIO%\AppData\Local\Temp\” rd /s /q.

Esto elimina las enumeraciones adicionales que tiene el bucle for en la versión del símbolo del sistema. Generará un error al final porque no puede eliminar la carpeta en la que se encuentra. El símbolo del sistema siempre será más rápido que los cmdlets de PowerShell porque debe crear un objeto de archivo ya que no existe un cmdlet nativo que simplemente cree una ruta de archivo como una cadena. . Se necesita tiempo para obtener la información agregada, como el tamaño del archivo, la fecha de creación, etc., y crear dicho objeto. Definitivamente verá una diferencia si la cantidad de archivos tiene cinco dígitos o más. Solía ​​​​mantener carpetas y archivos que necesitaban eliminación/archivo a diario y que tenían entre 6 dígitos altos y 7 bajos y esta generalmente era la solución de eliminación más rápida.

Usuario de Reddit

Sin ponerlo todo en un bloque de script Measure-Command, no lo sé.

Sé que el directorio que proporcionas es

$env:TEMPo el %TEMP%99% del tiempo. Se encuentra ubicado en %LOCALAPPDATA%o $env:LOCALAPPDATA.

También sé que no es necesario obtener un elemento infantil. Podrías simplemente

Remove-Item "$($env:TEMP)\*"-Recurse -Forceodel /f /s /q %TEMP%

Además, /s se encarga de todos los subdirectorios, por lo que no necesita más que un comando para hacer lo mismo que los comandos del bot y el bucle.

Usuario de Reddit

Hace un par de años analicé la posibilidad de eliminar algunas carpetas enormes (12 Gb, archivos de 75 k, carpetas de 7 k) de un script y me decidí por esta llamada dotnet.

[Sistema.IO.Directorio]::Eliminar($Carpeta.Nombre completo, $verdadero)

Es rápido en una máquina remota ya que no enumera localmente. No estoy seguro de cómo se adapta a su caso de uso. Elimina la carpeta base. Es posible que pueda recrearlo o que se cree automáticamente cuando se use. Además, las carpetas temporales pueden tener archivos abiertos, sin estar seguro de qué sucede allí.

Usuario de Reddit

Tenga mucho cuidado con la robocopia usando /mir. Un día fui testigo de cómo mi socio en el crimen reflejaba un gran servidor de archivos de producción en su nuevo hogar en un cronograma que había estado funcionando durante un par de semanas. Pasó al nuevo hogar y borró la fuente. Robocopy eliminó toda la producción al instante. Se puso blanco ante mis ojos cuando se dio cuenta de lo que había sucedido. Gracias a Dios teníamos instantáneas en ejecución. La recuperación importante más rápida que jamás haya presenciado. En 5 (o menos) minutos se recuperó toda la producción. Nunca volvimos a hablar de esto. Pero tengo mucho cuidado con la robocopia y el modificador /mir.

Usuario de Reddit

La forma más rápida, con diferencia, de eliminar archivos/carpetas en masa es robocopy, que se puede ejecutar usando cmd.exe (puede iniciarse uno o dos segundos más rápido, el tiempo de ejecución será el mismo):

mkdir “%USERPROFILE%\empty” robocopy “%USERPROFILE%\empty” “%USERPROFILE%\AppData\Local\Temp” /mir rmdir “%USERPROFILE%\empty”

O ejecútelo usando powershell.exe o pwsh.exe, aunque no parece que se necesite PowerShell aquí:

mkdir “$ENV:USERPROFILE\empty” & robocopy “$ENV:USERPROFILE\empty” “$ENV:USERPROFILE\AppData\Local\Temp” /mir rmdir “$ENV:USERPROFILE\empty”

Ahora bien, es posible que tengas problemas aquí debido a que los archivos están en uso.

Usuario de Reddit

Get-ChildItem -Path “$env:PERFIL DE USUARIO\AppData\Local\Temp” -Force | Quitar elemento -Forzar -Recurrir -ErrorAcción Continuar silenciosamente

Usuario de Reddit

del /f /s /q “%PERFIL DE USUARIO%\AppData\Local\Temp\*.*” >nul 2>&1

para /d %%x en (“%USERPROFILE%\AppData\Local\Temp*.*”) haga @rd /s /q “%%x”

Script CMD o script PowerShell: ¿cuál es más rápido para la eliminación masiva de archivos/directorios? por u/castiel3125 en PowerShell

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *