Puoi eliminare in massa file/directory con CMD o Powershell, ma ci sono opzioni più veloci
Lo script C sarebbe più veloce
Cd /d “%PROFILOUTENTE%\AppData\Local\Temp\” rd /s /q.
Questo elimina le enumerazioni extra che il ciclo for hai nella versione del prompt dei comandi. Alla fine genererà un errore perché non puoi eliminare la cartella in cui ti trovi. Il prompt dei comandi sarà sempre più veloce dei cmdlet di PowerShell perché devi creare un oggetto file poiché non esiste un cmdlet nativo che crei semplicemente un percorso file come una stringa . Ci vuole tempo per ottenere le informazioni aggiunte come dimensione del file, data di creazione, ecc. e creare detto oggetto. Noterai sicuramente una differenza se il numero di file è di cinque cifre o superiore. Lo utilizzo per mantenere quotidianamente cartelle e file che necessitavano di eliminazione/archiviazione che si trovavano nelle 6 cifre alte e basse 7 e questa era solitamente la soluzione di eliminazione più veloce.
Utente Reddit
Senza inserire tutto in uno scriptblock per
Measure-Command
, non lo so.So che la directory che fornisci è
$env:TEMP
o il%TEMP%
99% delle volte. Si trova in%LOCALAPPDATA%
o$env:LOCALAPPDATA
.So anche che non è necessario get-childitem. Potresti semplicemente
Remove-Item "$($env:TEMP)\*"-Recurse -Force
Odel /f /s /q %TEMP%
Inoltre, /s si prende cura di tutte le sottodirectory, quindi non è necessario che un solo comando faccia la stessa cosa dei comandi bot e del loop.
Utente Reddit
Ho cercato di eliminare alcune cartelle enormi (12 Gb, 75.000 file, 7.000 cartelle) da uno script un paio di anni fa e ho optato per questa chiamata dotnet.
[System.IO.Directory]::Elimina($Cartella.Nome completo, $true)
È veloce su un computer remoto poiché non enumera localmente. Non sono sicuro di come si adatti al tuo caso d’uso. Elimina la cartella di base. Potresti essere in grado di ricrearlo o potrebbe crearsi automaticamente quando utilizzato. Inoltre, le cartelle temporanee possono contenere file aperti, ma non sono sicuro di cosa accada lì.
Utente Reddit
Fai molta attenzione con Robocopy usando /mir. Un giorno ho visto il mio complice eseguire il mirroring di un file server di produzione di grandi dimensioni nella sua nuova casa secondo un programma che era in corso da un paio di settimane. Passò alla nuova casa e cancellò la fonte. Robocopy ha eliminato immediatamente tutta la produzione. È diventato bianco proprio davanti ai miei occhi quando si è reso conto di cosa era successo. Grazie a Dio avevamo delle copie ombra in esecuzione. La ripresa più rapida a cui abbia mai assistito. Entro 5 (o meno) minuti tutta la produzione è tornata. Non ne abbiamo mai più parlato. Ma sto molto attento con Robocopy e lo switch /mir.
Utente Reddit
Il modo di gran lunga più veloce per eliminare in massa file/cartelle è robocopy, che può essere eseguito utilizzando cmd.exe (potrebbe avviarsi un secondo o due più velocemente, il tempo di esecuzione sarà lo stesso):
mkdir “%USERPROFILE%\vuoto” robocopy “%USERPROFILE%\vuoto” “%USERPROFILE%\AppData\Local\Temp” /mir rmdir “%USERPROFILE%\vuoto”
Oppure esegui utilizzando powershell.exe o pwsh.exe anche se non sembra che PowerShell sia necessario qui:
mkdir “$ENV:USERPROFILE\empty” & robocopy “$ENV:USERPROFILE\empty” “$ENV:USERPROFILE\AppData\Local\Temp” /mir rmdir “$ENV:USERPROFILE\empty”
Ora, potresti riscontrare problemi qui a causa dei file in uso
Utente Reddit
Get-ChildItem -Path “$env:USERPROFILE\AppData\Local\Temp” -Force | Rimuovi-Articolo -Forza -Recurse -ErrorAction Continua silenziosamente
Utente Reddit
del /f /s /q “%PROFILOUTENTE%\AppData\Local\Temp\*.*” >nul 2>&1
for /d %%x in (“%PROFILOUTENTE%\AppData\Local\Temp*.*”) do @rd /s /q “%%x”
Script CMD o script PowerShell: quale è più veloce per l’eliminazione di massa di file/directory? da u/castiel3125 in PowerShell
Lascia un commento