Możesz masowo usuwać pliki/katalogi za pomocą CMD lub Powershell, ale są szybsze opcje
Skrypt C byłby szybszy
Cd /d „%USERPROFILE%\AppData\Local\Temp\” rd /s /q.
Eliminuje to dodatkowe wyliczenia, które występują w pętli for w wersji z wierszem poleceń. Na końcu wyświetli się błąd, ponieważ nie można usunąć folderu, w którym się znajdujesz. Wiersz poleceń będzie zawsze szybszy niż polecenia cmdlet PowerShell, ponieważ musisz zbudować obiekt pliku, ponieważ nie ma natywnego polecenia cmdlet, które po prostu buduje ścieżkę pliku jako ciąg . Uzyskanie dodanych informacji, takich jak rozmiar pliku, data utworzenia itp. i utworzenie wspomnianego obiektu, wymaga czasu. Na pewno zobaczysz różnicę, jeśli liczba plików będzie wynosić pięć cyfr lub więcej. Codziennie przechowuję foldery i pliki, które wymagały usunięcia/archiwizacji, i zawierały od 6 do 7 cyfr i zwykle było to najszybsze rozwiązanie.
Użytkownik Reddita
Bez umieszczania tego wszystkiego w bloku skryptu dla
Measure-Command
, nie wiem.Wiem, że katalog, który podałeś to
$env:TEMP
lub w%TEMP%
99% przypadków. Znajduje się w%LOCALAPPDATA%
lub$env:LOCALAPPDATA
.Wiem też, że nie potrzebujesz get-childitem. Mógłbyś po prostu
Remove-Item "$($env:TEMP)\*"-Recurse -Force
Lubdel /f /s /q %TEMP%
Ponadto /s zajmuje się wszystkimi podkatalogami, więc nie potrzebujesz tylko jednego polecenia, aby zrobić to samo, co polecenia bota i pętla.
Użytkownik Reddita
Kilka lat temu zastanawiałem się nad usunięciem ze skryptu kilku dużych folderów (12 GB, 75 tys. plików, 7 tys. folderów) i zdecydowałem się na to wywołanie dotnet.
[System.IO.Directory]::Delete($Folder.Fullname, $true)
Jest szybki na zdalnym komputerze, ponieważ nie wylicza lokalnie. Nie jestem pewien, jak pasuje to do Twojego przypadku użycia. Usuwa folder podstawowy. Możesz go odtworzyć lub może zostać utworzony automatycznie, gdy zostanie użyty. Ponadto foldery tymczasowe mogą zawierać otwarte pliki, ale nie jestem pewien, co się tam stanie.
Użytkownik Reddita
Zachowaj ostrożność podczas kopiowania za pomocą /mir. Byłem świadkiem, jak pewnego dnia mój wspólnik w zbrodni przeniósł duży, produkcyjny serwer plików do swojego nowego domu, zgodnie z harmonogramem obowiązującym od kilku tygodni. Przełączył się na nowy dom i usunął źródło. Robocopy natychmiast usunął całą produkcję. Zbladł na moich oczach, gdy zdał sobie sprawę, co się stało. Dzięki Bogu, że mieliśmy uruchomione kopie-cienie. Najszybszy powrót do zdrowia, jaki kiedykolwiek widziałem. W ciągu 5 (lub mniej) minut cała produkcja została przywrócona. Nigdy więcej o tym nie rozmawialiśmy. Ale jestem bardzo ostrożny w przypadku robocopy i przełącznika /mir.
Użytkownik Reddita
Zdecydowanie najszybszym sposobem masowego usuwania plików/folderów jest robocopy, które można uruchomić za pomocą cmd.exe (może uruchomić się sekundę lub dwie szybciej, czas wykonania będzie taki sam):
mkdir „%USERPROFILE%\empty” robocopy „%USERPROFILE%\empty” „%USERPROFILE%\AppData\Local\Temp” /mir rmdir „%USERPROFILE%\empty”
Lub uruchom za pomocą programu powershell.exe lub pwsh.exe, chociaż nie wygląda na to, że PowerShell jest tutaj potrzebny:
mkdir „$ENV:USERPROFILE\empty” & robocopy „$ENV:USERPROFILE\empty” „$ENV:USERPROFILE\AppData\Local\Temp” /mir rmdir „$ENV:USERPROFILE\empty”
Teraz możesz napotkać problemy z powodu używanych plików
Użytkownik Reddita
Get-ChildItem -Path „$env:USERPROFILE\AppData\Local\Temp” -Force | Usuń element -Wymuś -Recurse -ErrorAction SilentlyContinue
Użytkownik Reddita
del /f /s /q „%USERPROFILE%\AppData\Local\Temp\*.*” >nul 2>&1
for /d %%x in („%USERPROFILE%\AppData\Local\Temp*.*”) do @rd /s /q „%%x”
Skrypt CMD czy skrypt PowerShell: który jest szybszy w przypadku masowego usuwania plików/katalogów? przez u/castiel3125 w PowerShell
Dodaj komentarz