Você pode excluir arquivos/diretórios em massa com CMD ou Powershell, mas existem opções mais rápidas
O script C seria mais rápido
Cd /d “%USERPROFILE%\AppData\Local\Temp\” rd /s /q.
Isso elimina as enumerações extras do loop for que você possui na versão do prompt de comando. Isso gerará um erro no final porque você não pode excluir a pasta em que está. O prompt de comando sempre será mais rápido que os cmdlets do PowerShell porque você precisa criar um objeto de arquivo, pois não há cmdlet nativo que apenas crie um caminho de arquivo como uma string . Leva tempo para obter as informações adicionadas, como tamanho do arquivo, data de criação, etc., e criar o referido objeto. Você definitivamente verá uma diferença se o número de arquivos estiver na casa dos cinco dígitos ou mais. Eu costumava manter pastas e arquivos que precisavam ser excluídos/arquivados diariamente e que estavam entre 6 e 7 dígitos e essa geralmente era a solução de exclusão mais rápida.
Usuário Reddit
Sem colocar tudo em um scriptblock for
Measure-Command
, não sei.Eu sei que o diretório que você fornece é
$env:TEMP
ou%TEMP%
99% do tempo. Ele está localizado em%LOCALAPPDATA%
ou$env:LOCALAPPDATA
.Eu também sei que você não precisa de get-childitem. Você poderia apenas
Remove-Item "$($env:TEMP)\*"-Recurse -Force
oudel /f /s /q %TEMP%
Além disso, /s cuida de todos os subdiretórios para que você não precise apenas de um comando para fazer a mesma coisa que os comandos do bot e o loop.
Usuário Reddit
Analisei a exclusão de algumas pastas enormes (arquivos de 12 Gb, 75 mil, pastas de 7 mil) de um script há alguns anos e decidi por essa chamada dotnet.
[System.IO.Directory]::Delete($Folder.Fullname, $true)
É rápido em uma máquina remota, pois não enumera localmente. Não tenho certeza de como isso se adapta ao seu caso de uso. Ele exclui a pasta base. Você pode recriá-lo ou ele pode ser criado automaticamente quando usado. Além disso, as pastas temporárias podem ter arquivos abertos, sem saber o que acontece lá.
Usuário Reddit
Tenha muito cuidado com o robocopy usando /mir. Certo dia, testemunhei meu parceiro no crime espelhando um grande servidor de arquivos de produção em sua nova casa, em uma programação que estava em execução há algumas semanas. Ele passou para a nova casa e excluiu a fonte. Robocopy excluiu toda a produção instantaneamente. Ele ficou branco bem diante dos meus olhos ao perceber o que havia acontecido. Graças a Deus tínhamos cópias de sombra em execução. A recuperação mais rápida que já testemunhei. Em 5 (ou menos) minutos toda a produção estava de volta. Nunca mais falamos sobre isso. Mas sou muito cuidadoso com o robocopy e a opção /mir.
Usuário Reddit
De longe, a maneira mais rápida de excluir arquivos/pastas em massa é o robocopy, que pode ser executado usando cmd.exe (pode iniciar um ou dois segundos mais rápido, o tempo de execução será o mesmo):
mkdir “%USERPROFILE%\empty” robocopy “%USERPROFILE%\empty” “%USERPROFILE%\AppData\Local\Temp” /mir rmdir “%USERPROFILE%\empty”
Ou execute usando powershell.exe ou pwsh.exe, embora não pareça que o PowerShell seja necessário aqui:
mkdir “$ENV:USERPROFILE\empty” & robocopy “$ENV:USERPROFILE\empty” “$ENV:USERPROFILE\AppData\Local\Temp” /mir rmdir “$ENV:USERPROFILE\empty”
Agora, você pode ter problemas aqui devido aos arquivos em uso
Usuário Reddit
Get-ChildItem -Path “$env:USERPROFILE\AppData\Local\Temp” -Force | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
Usuário Reddit
del /f /s /q “%USERPROFILE%\AppData\Local\Temp\*.*” >nul 2>&1
for /d %%x in (“%USERPROFILE%\AppData\Local\Temp*.*”) faça @rd /s /q “%%x”
Script CMD ou script PowerShell: qual é mais rápido para exclusão em massa de arquivos/diretórios? por u/castiel3125 no PowerShell
Deixe um comentário