https://community.spiceworks.com/scripts?source=navbar-footer<\/a><\/p>\nThere’s likely something similar to what you’re looking for with the exemption for file extensions you don’t want deleted.<\/p>","upvoteCount":0,"datePublished":"2022-05-18T19:02:00.000Z","url":"https://community.spiceworks.com/t/script-to-delete-files/833107/3","author":{"@type":"Person","name":"tb33t","url":"https://community.spiceworks.com/u/tb33t"}},{"@type":"Answer","text":"
cd\\ directory\nattrib -a *.*\nattrib +a *.*\nattrib -a *.qbw\ndel /q /a:a *.*\n<\/code><\/pre>\nAdd an attrib -a line for each for each file extension you do not want to delete. This will delete all file in the current directory that have the archive bit set.<\/p>","upvoteCount":0,"datePublished":"2022-05-18T19:03:44.000Z","url":"https://community.spiceworks.com/t/script-to-delete-files/833107/4","author":{"@type":"Person","name":"thelanranger","url":"https://community.spiceworks.com/u/thelanranger"}},{"@type":"Answer","text":"
This is what I have so far. I’ve ran it but it doesn’t exclude and deletes what I am trying to exclude. This is for a test before I put in the QuickBooks file extensions.<\/p>\n
Get-ChildItem 'C:\\Users\\localadmin' -Exclude *.txt *.rtf *.accdb |\n Remove-Item -Recurse -Verbose\n<\/code><\/pre>","upvoteCount":0,"datePublished":"2022-05-18T19:15:30.000Z","url":"https://community.spiceworks.com/t/script-to-delete-files/833107/5","author":{"@type":"Person","name":"justinmcconkey2","url":"https://community.spiceworks.com/u/justinmcconkey2"}},{"@type":"Answer","text":"Try it like this.<\/p>\n
Get-ChildItem 'C:\\Users\\localadmin' -Recurse -Exclude *.txt, *.rtf, *.accdb |\n Remove-Item -Verbose -Whatif\n<\/code><\/pre>","upvoteCount":0,"datePublished":"2022-05-19T10:13:09.000Z","url":"https://community.spiceworks.com/t/script-to-delete-files/833107/6","author":{"@type":"Person","name":"ealy","url":"https://community.spiceworks.com/u/ealy"}},{"@type":"Answer","text":"\n\n
<\/div>\n
Justin McConkey:<\/div>\n
\nThis is what I have so far. I’ve ran it but it doesn’t exclude and deletes what I am trying to exclude. This is for a test before I put in the QuickBooks file extensions.<\/p>\n
Get-ChildItem 'C:\\Users\\localadmin' -Exclude *.txt *.rtf *.accdb |\n Remove-Item -Recurse -Verbose\n<\/code><\/pre>\n<\/blockquote>\n<\/aside>\na not so efficient solution would be trying the inverse. \nselect all and remove the QB one. (I’m not sure what the actual QuickBooks one is)<\/p>\n
Get-ChildItem 'C:\\Users\\localadmin' |\nwhere-object {$_.Extension -ne '.qb'} |\nRemove-Item -Recurse -Verbose -whatif\n<\/code><\/pre>","upvoteCount":0,"datePublished":"2022-05-19T14:17:15.000Z","url":"https://community.spiceworks.com/t/script-to-delete-files/833107/7","author":{"@type":"Person","name":"Neally","url":"https://community.spiceworks.com/u/Neally"}},{"@type":"Answer","text":"Hi.<\/p>\n
I have wrote a script that zip or delete files och catalog. Using parameter 5 and 6 you kan exclude two file-extensions.<\/p>\n
the code you can use is lines 167(geting file names and path + exclude) and code between lines: 247 - 284 i attached code.<\/p>\n
Regards<\/p>\n
Erland<\/p>\n
Code:<\/p>\n
# Exempel på Starta skript: katalog att rensa + hur många dagar bakåt att rensa, ex: -$DagarAttSpara 180 betyder filer äldre än 6månader rensas.\n#Start program delete:\n# K:\\team_Rabbis\\Powershell\\stadning\\rensa_filer_kataloger_ev_andelse_zip_del.ps1 -DagarAttSpara 8 -LoggKatalog K:\\powershell\\log -KatalogRensaZipa K:\\testmapp_PS\\test16 -Visa 1\n#lokal test vid zipning av filer\n# K:\\team_Rabbis\\Powershell\\stadning\\rensa_filer_kataloger_ev_andelse_zip_del.ps1 -DagarAttSpara 10 -RensaEllerZipa 0 -LoggKatalog K:\\powershell\\log -KatalogRensaZipa K:\\testmapp_PS\\test15 -Visa 1\n#\n#Tips\n#Koll när filen skapades: $_.CreationTime.\n#\n#: -Include *.txt eller frånta om man vill rensa allt annat: -Exclude *.txt\n#\n########################################################################################################################################\n#Parameter förklaring:\n#\n#Om man ev vill kolla på sista skriv datum dvs ta bort filer som inte blivit uppdaterad under de sista x dagarna.\n#$_.LastWriteTime \n#\n# Filer med viss ändelse som man vill inte vill ska ingå i rensningen anges i två parameterar.\n# $FilAndelseExcl1\n# $FilAndelseExcl2\n#\n#Antal dagar som loggar skall ligga kvar. Räknas bakåt från körningens datum. Default satt till 180 dagar ~ 6 måndader\n#$DagarAttSpara\n#\n#Vilken katalog men skall zip:a eller rensa i. Default satt till Dummy katalog = skickas ingen katalog in stoppar programmet.\n#$KatalogRensaZipa\n#\n#Startkatalog: parameter satt till 1 rensas filer/kataloger rekursivt och om parametern satt till 0 är att man vill zipa filer(enbart), default satt till 1=deleta filer.\n#$RensaEllerZipa\n#\n#$LoggKatalog = \"c:\\temp\\\"\n#\n#$Driver \n#Anger vilken Enhets bokstav som hur mycket diskutrymme som finns kvar. E:\\ är default. Anges till parametern utan fnuttar: E\nParam(\n #[ValidateScript({Test-Path $_})]\n [Parameter(Mandatory=$False,Position=1)]\n [string]$DagarAttSpara = 180\n ,\n [Parameter(Mandatory=$False,Position=2)]\n [string]$KatalogRensaZipa = 'dummyKatalog'\n ,\n [Parameter(Mandatory=$False,Position=3)]\n [string]$RensaEllerZipa = 1\n ,\n [Parameter(Mandatory=$False,Position=4)]\n [string]$LoggKatalog = 'c:\\temp\\'\n ,\n [Parameter(Mandatory=$False,Position=5)]\n [string]$FilAndelseExcl1 = 'dummy1'\n ,\n [Parameter(Mandatory=$False,Position=6)]\n [string]$FilAndelseExcl2 = 'dummy2'\n ,\n [Parameter(Mandatory=$False,Position=7)]\n [string]$Visa\n ,\n [Parameter(Mandatory=$False,Position=7)]\n [string]$Driver = 'E'\n)\n\n#Interna parametrar\n#Används för att skriva dag i logg-filen\n$DagSkrivit =1\n$zipade_filer = \"zipade_filer.txt\"\n$deletade_filer = \"deletade_filer.txt\"\n$deletade_kataloger = \"deletade_kataloger.txt\"\n#räknare för att hålla reda på hur många filer som zip/delatas\n$CountFiles = 0\n$CountFolder = 0\n$CountFiles_zip = $False\n$CountFiles_del = $False\n$CountKatalog= $False\n\n#7Zip-lokalt\n$7zipPath = \"C:\\Program Files\\7-Zip\\7z.exe\"\n#$7zipPath = \"E:\\Appl\\7-Zip\\7z.exe\"\nif (-not (Test-Path -Path $7zipPath -PathType Leaf)) {\n\tNew-Item $LocalPath\\ERROR_$prog\n\tSet-Content $LocalPath\\ERROR_$prog \"$prog : $idag_tid : 7-zip Error Error: 7 zip file '$7zipPath' not found. $_.Exception.Message\"\n throw \"7 zip file '$7zipPath' not found\"\n}\nSet-Alias 7zip $7zipPath\n\nif($Visa)\n{\n write-host \"Fil som skall deletas/Zipas i katalog status: $RensaEllerZipa \"\n write-host \"logfils katalog: $LoggKatalog\"\n write-host \"loggarnas tid att spara: $DagarAttSpara\"\n}\n\n#Ta fram datum, till att tidsstämpla filerna\n$idag = Get-Date -Format \"yyyyMMdd\"\n$idag_date = Get-Date -Format \"yyyy-MM-dd\"\n$igar = (Get-Date).AddDays(-1)\n$igar_date = (Get-Date).AddDays(-1)\n$igar = Get-Date $igar -Format \"yyyyMMdd\"\n$igar_date = Get-Date $igar_date -Format \"yyyy-MM-dd\"\n$TvaDagar = (Get-Date).AddDays(-2)\n$TvaDagare_date = (Get-Date).AddDays(-2)\n$TvaDagar = Get-Date $TvaDagar -Format \"yyyyMMdd\"\n$TvaDagare_date = Get-Date $TvaDagare_date -Format \"yyyy-MM-dd\"\n$ar = Get-Date -Format \"yyyy\"\n$manad = Get-Date -Format \"MM\"\n$ArManad = $ar+$manad\n$idag_tid = Get-Date -Format \"yyyyMMdd-HH:mm:ss\"\n$two_weeks_ago = Get-Date\n$two_weeks_ago = $two_weeks_ago.AddDays(-14).ToString(\"yyyy-MM-dd\")\n$prog=$MyInvocation.MyCommand.Name\n\n \n######################################################################################################################\n# Avsnitt där kontroll att katalog finns och avslutas med \\\n#\n#####################################################################################################################\n#Se till att katalog att rensa avslutas med \\ och att katalog för städning\\zip:A finns, annars avsluta. Kolla om det skall renas eller zip:as\n#$isFolder = Test-Path $KatalogAttRensa -PathType Container\n$isFolderDel = Test-Path $KatalogRensaZipa -PathType Container\n\nif($Visa){write-host \"Katalog att rensa/zip 0=zipa filer, 1=deleta, inskickat värde: $RensaEllerZipa \"} \nif($Visa){write-host \"Katalog rensa: $KatalogRensaZipa\"} \nif($Visa -and $RensaEllerZipa -eq 1){write-host \"StartKatalog att rensa innan koll: $KatalogRensaZipa\"} \nif($Visa -and $RensaEllerZipa -eq 0){write-host \"StartKatalog att zipa innan koll: $KatalogRensaZipa\"} \n\nif ($isFolderDel -eq $True ) {\n if ($KatalogRensaZipa.EndsWith('\\') -eq $false) {\n $KatalogRensaZipa += '\\'\n }\n} \nelse {\n if($Visa) {write-host \"Katalog att rensa/Zipa: $KatalogRensaZipa, finns ej så program avslutas.\"}\n exit\n}\nif($Visa) {write-host \"Katalog att rensa: $KatalogRensaZipa\"}\n\n#Se till att katalog där loggning skall ske till avslutas med \\ och finns, annars så skapas katalogen.\n$isLogFolder = Test-Path $LoggKatalog -PathType Container\nif($Visa) {write-host \"Katalog som loggfil skrivs till: $LoggKatalog\"}\n\nif ($isLogFolder -eq $True) {\n if ($LoggKatalog.EndsWith('\\') -eq $false) {\n $LoggKatalog += '\\'\n }\n} \nelse {\n if($Visa) {write-host \"Katalog att skriva logfil till: $LoggKatalog, finns ej så katalog skapas.\"}\n\n New-Item -ItemType Directory -Force -Path $LoggKatalog\n #även se till att katalogen avslutas med \\\n if ($LoggKatalog.EndsWith('\\') -eq $false) {\n $LoggKatalog += '\\'\n }\n}\nif($Visa) {write-host \"logkatalog avslutas nu med: $LoggKatalog\"}\n\n################################################################################################################################\n# Filer: rensning eller zip\n###############################################################################################################################\n\n#Ta fram filer att rensa även från underkataloger -Recurse. -Force undantrycka fel -File för att enbart ta med filer.\n#$oldFiles = Get-ChildItem -Path $KatalogAttRensa -include *.$FilAndelse -File -Recurse -Force \n$oldFiles = Get-ChildItem -Path $KatalogRensaZipa -Exclude *.$FilAndelseExcl1, *.$FilAndelseExcl2 -File -Recurse\n\nif($Visa -and $RensaEllerZipa -eq 1 -and $oldFiles){write-host \"Filer/kataloger skall deletas: $oldFiles\"} ElseIf($Visa -and $RensaEllerZipa -eq 0 -and $oldFiles){write-host \"Filer skall zipas: $oldFiles\"} Else{ if($Visa){write-host \"Det här gick ju inte bra = ingen träfflista\"} Exit}\n\n#loopa igenom fil listan och se vilka filer som skall tas bort = ädre än antalet dagar enl inparametern.\nforeach ($oldFile in $oldFiles) {\n\n#koll om parameter för att filer skall zipas är satt + koll att filen inte redan är zipad\n if($RensaEllerZipa -eq 0 -and $oldFile -notmatch \".zip\"){\n #kolla om det är en fil eller katalog\n if($Visa) {write-host \"Fil som kollas: $oldFile\"}\n $isFil = (!$oldFile.PSIsContainer)\n #$isFolder = Test-Path $KatalogCopFran -PathType Container\n if($Visa) {write-host \"Var det en fil: $isFil\"}\n if($Visa) {write-host $oldFile.LastWriteTime}\n if($Visa) {write-host \"Körnings tidpunkt jmf: \" (Get-Date).AddDays(-$DagarAttSpara)}\n\n #Prep för omdöpning av filändelse byte till .zip\n $file_zipped = $oldFile\n\t $newExtension = \"zip\"\n\t $file_zipped = [io.path]::ChangeExtension($file_zipped,$newExtension)\n\t $file_zipped_path = $file_zipped\n\t if ($Visa) { Write-Output \"Visa: KatalogRensaZipa: $KatalogRensaZipa\" }\n if ($Visa) { Write-Output \"Visa: file_zipped_path $file_zipped_path\" }\n if ($Visa) { Write-Output \"Visa: localfile: $oldFile\" }\n\t if ($Visa) { Write-Output \"Visa: KatalogRensaZipa localFile: $KatalogRensaZipa$oldFile\" }\n if ($Visa) { Write-Output \"Visa: KatalogRensaZipa sökväg: $file_zipped_path\" }\n if ($Visa) { Write-Output \"Visa: Del av filnamn: $file_zipped\" }\n if ($Visa) { Write-Output \"Visa: Är lastWr vs DagSpara TRUE: \" }\n\n #Fortsätt och verifiera enbart om det är en fil\n if($isFil){\n\n #Skriva dag i logg-filen för rensade filer.\n if($DagSkrivit){Get-Date -Format \"yyyy-MM-dd HH:mm\" | Out-File $LoggKatalog\\$ArManad'_'$zipade_filer -Append}\n #Bara skriva dag i filen en gång.\n $DagSkrivit=0\n\n #om filen är äldre än angivet antal dag = zip:a filen\n if($oldFile.LastWriteTime -lt (Get-Date).AddDays(-$DagarAttSpara)) {\n\n if($Visa) {write-host \"Fil som skall zip:as: $oldFile\"}\n if($Visa) {write-host \"Program som kör: $prog\"}\n if($Visa) {write-host \"sökväg: $oldFile\"}\n if($Visa) {write-host \"filens tid: \" $oldFile.LastWriteTime}\n if($Visa) {write-host \"dagar bakåt: \" (Get-Date).AddDays(-$DagarAttSpara)}\n\n #zip:ar filen till samma katalog och sedan rensa bort orginal filen.\n 7zip a -sdel $file_zipped_path $oldFile \n\n #Räkna antalet filer som zip:as och sätta att filer har zip:as.\n $CountFiles +=1\n $CountFiles_zip = $True\n\n if ($? -ne \"True\")\n {\n Write-Error \"$prog : $idag_tid : Problem med 7-zip\"\n\t\t\t New-Item $LocalPath\\ERROR_zip_$localFile\n\t\t\t Set-Content $LocalPath\\ERROR_zip_$localFile \"$prog : $idag_tid : Problem med att använda 7-zip\"\n\t\t\t continue\n }\n\t if ($Visa) { Write-Output \"Visa: file_zipped_path: $oldFile\" }\n\n $oldFile.FullName | Out-File $LoggKatalog\\$ArManad'_'$zipade_filer -Append\n \n }\n else {\n if($Visa) {write-host \"Fil var inte tillräckligt gammal: $oldFile\"}\n }\n }\n else {\n\n if($Visa) {write-host \"Detta var ingen fil: $oldFile\"}\n }\n \n }\n\n #Filerna skall rensas\n Elseif($RensaEllerZipa -eq 1){\n #kolla om det är en fil eller katalog\n if($Visa) {write-host \"Fil som kollas: $oldFile\"}\n $isFil = (!$oldFile.PSIsContainer)\n #$isFolder = Test-Path $KatalogCopFran -PathType Container\n if($Visa) {write-host \"Var det en fil: $isFil\"}\n\n #Fortsätt och verifiera enbart om det är en fil\n if($isFil){\n\n #Skriva dag i logg-filen för rensade filer.\n if($DagSkrivit){Get-Date -Format \"yyyy-mm-dd HH:mm\" | Out-File $LoggKatalog\\$ArManad'_'$deletade_filer -Append}\n #Bara skriva dag i filen en gång.\n $DagSkrivit=0\n\n #om filen är äldre än angivet antal dag = deleta\n if($oldFile.LastWriteTime -lt (Get-Date).AddDays(-$DagarAttSpara)) {\n\n if($Visa) {write-host \"Fil som skall deletas: $oldFile\"}\n Remove-Item $oldFile.FullName -Force\n $oldFile.FullName | Out-File $LoggKatalog\\$ArManad'_'$deletade_filer -Append\n\n #Räkna antalet filer som deletas och sätta att filer har deletats.\n $CountFiles +=1\n $CountFiles_del = $True\n \n }\n else {\n if($Visa) {write-host \"Fil var inte tillräckligt gammal: $oldFile\"}\n }\n }\n else {\n\n if($Visa) {write-host \"Detta var ingen fil: $oldFile\"}\n }\n\n }\n Else {\n {write-host \"Ingen parameter för katalog att rensa i eller zipa har angets, programmet bör redan ha avslutats vid katalog kontrollen!!!!!!!!!\"}\n exit\n }\n}\n\n#kolla tillgänglig volym på E:\\\n#$vDisk = Get-PSDrive K | Select-Object Used,@{'Name' = 'Free (GB)'; Expression= { [int]($_.Free / 1GB) }}\n$vDisk = [math]::Round((Get-Volume -DriveLetter $Driver).SizeRemaining / 1GB) \nif($Visa) {write-host \"utrymme kvar på E: \" $vDisk '(GB)'}\n\nif($RensaEllerZipa -eq 0) {\"Antal filer som Zip:ats: \" + $CountFiles | Out-File $LoggKatalog\\$ArManad'_'$zipade_filer -Append}\nif($RensaEllerZipa -eq 0){\"Plats kvar på E:\\ \" + $vDisk +\" GB\" | Out-File $LoggKatalog\\$ArManad'_'$zipade_filer -Append}\n\nif($RensaEllerZipa -eq 1) {\"Antal filer som deletats: \" + $CountFiles | Out-File $LoggKatalog\\$ArManad'_'$deletade_filer -Append}\nif($RensaEllerZipa -eq 1){\"Plats kvar på E:\\ \" + $vDisk +\" GB\"| Out-File $LoggKatalog\\$ArManad'_'$deletade_filer -Append}\n\n####################################################################################################################\n# Rensa kataloger\n###################################################################################################################\n\n#Ta fram kataloger att rensa även från underkataloger -Recurse. Sort-Object -Property $KatalogAttRensa.FullName. Beroende på om parameter för zip eller rensning är satt.\n$oldKatalogs = if($RensaEllerZipa -eq 1){Get-ChildItem -Path $KatalogRensaZipa -Directory -Recurse} else {write-host \"Kataloger skall inte deletas\"}\n#Sorterar efter folder djup. *Används i foreach-loop istället.\n#$oldKatalogs | Select-Object FullName | Sort-Object -Descending FullName\n#$oldKatalogs | Select-Object FullName, @{Name=\"FolderDepth\";Expression={$_.DirectoryName.Split('\\').Count}} | Sort-Object -Descending FolderDepth,FullName\nif($Visa) {write-host \"Kataloger att ev rensa: $oldKatalogs\"}\n\n#Sätta om parameter för skrivning till fil iom nu kollar vi på kataloger\n$DagSkrivit=1\n#Skriva dag i logg-filen för rensade Kataloger.\nif($DagSkrivit){Get-Date -Format \"yyyy-MM-dd HH:mm\" | Out-File $LoggKatalog\\$ArManad'_'$deletade_kataloger -Append}\n#Bara skriva dag i filen en gång.\n$DagSkrivit=0\n\n#loopa igenom katalogl listan och se vilka kataloger som skall tas bort = ädre än antalet dagar enl inparametern.\nforeach ($oldkat in ($oldKatalogs | Sort-Object -Descending FullName) ) {\n\n #test om det är en katalog\n if($Visa) {write-host \"Katalog som kollas: $oldkat\"}\n # ev använda denna: $isFil = (!$oldFile.PSIsContainer)\n $isFolder = Test-Path $oldkat.FullName -PathType Container\n if($Visa) {write-host \"Var det en katalog: $isFolder\"}\n\n #Räkna antalet filer som ev finns kvar i katalogen som deletas + ev subkataloger.\n $AntFiler = (Get-ChildItem $oldKat.FullName -File -Recurse).Count \n if($Visa) {write-host \"Frågan är om jag räknar: $AntFiler\"}\n\n #Koll om det är en katalog, koll om det finns filer kvar: $AntFiler från ovan, koll om katalogen är tillräckligt gammal för rensning.\n #iom borde bara vara kataloger.\n if ( ($isFolder -eq $True) -and ($oldkat.LastWriteTime -lt (Get-Date).AddDays(-$DagarAttSpara)) -and ($AntFiler -eq 0) ) {\n\n if($Visa) {write-host \"Katalog som skall deletas: $oldkat\"}\n Remove-Item $oldkat.FullName -Force -Recurse #-and ($AntFiler -eq 0) \n \n #Räkna antalet filer som zip:as och sätta att filer har zip:as\n $CountFolder +=1\n $CountKatalog = $True\n\n $oldkat.FullName | Out-File $LoggKatalog\\$ArManad'_'$deletade_kataloger -Append\n } \n else {\n\n if($Visa) {write-host \"Katalog var inte tillräckligt gammal för att deletas eller innehåller filer i katalog/subkatalog: $oldkat\"}\n }\n\n #Bara skriva dag i filen en gång.\n $DagSkrivit=0\n}\nif($CountKatalog) {\"Antal kataloger som deletats: \" + $CountFolder | Out-File $LoggKatalog\\$ArManad'_'$deletade_kataloger -Append} else {\"Antal kataloger som deletats: 0\" | Out-File $LoggKatalog\\$ArManad'_'$deletade_kataloger -Append}\n\n<\/code><\/pre>\n# Exempel på Starta skript: katalog att rensa + hur många dagar bakåt att rensa, ex: -$DagarAttSpara 180 betyder filer äldre än 6månader rensas.\n#Start program delete:\n# K:\\team_Rabbis\\Powershell\\stadning\\rensa_filer_kataloger_ev_andelse_zip_del.ps1 -DagarAttSpara 8 -LoggKatalog K:\\powershell\\log -KatalogRensaZipa K:\\testmapp_PS\\test16 -Visa 1\n#lokal test vid zipning av filer\n# K:\\team_Rabbis\\Powershell\\stadning\\rensa_filer_kataloger_ev_andelse_zip_del.ps1 -DagarAttSpara 10 -RensaEllerZipa 0 -LoggKatalog K:\\powershell\\log -KatalogRensaZipa K:\\testmapp_PS\\test15 -Visa 1\n#\n#Tips\n#Koll när filen skapades: $_.CreationTime.\n#\n#: -Include *.txt eller frånta om man vill rensa allt annat: -Exclude *.txt\n#\n########################################################################################################################################\n#Parameter förklaring:\n#\n#Om man ev vill kolla på sista skriv datum dvs ta bort filer som inte blivit uppdaterad under de sista x dagarna.\n#$_.LastWriteTime \n#\n# Filer med viss ändelse som man vill inte vill ska ingå i rensningen anges i två parameterar.\n# $FilAndelseExcl1\n# $FilAndelseExcl2\n#\n#Antal dagar som loggar skall ligga kvar. Räknas bakåt från körningens datum. Default satt till 180 dagar ~ 6 måndader\n#$DagarAttSpara\n#\n#Vilken katalog men skall zip:a eller rensa i. Default satt till Dummy katalog = skickas ingen katalog in stoppar programmet.\n#$KatalogRensaZipa\n#\n#Startkatalog: parameter satt till 1 rensas filer/kataloger rekursivt och om parametern satt till 0 är att man vill zipa filer(enbart), default satt till 1=deleta filer.\n#$RensaEllerZipa\n#\n#$LoggKatalog = \"c:\\temp\\\"\n#\n#$Driver \n#Anger vilken Enhets bokstav som hur mycket diskutrymme som finns kvar. E:\\ är default. Anges till parametern utan fnuttar: E\nParam(\n #[ValidateScript({Test-Path $_})]\n [Parameter(Mandatory=$False,Position=1)]\n [string]$DagarAttSpara = 180\n ,\n [Parameter(Mandatory=$False,Position=2)]\n [string]$KatalogRensaZipa = 'dummyKatalog'\n ,\n [Parameter(Mandatory=$False,Position=3)]\n [string]$RensaEllerZipa = 1\n ,\n [Parameter(Mandatory=$False,Position=4)]\n [string]$LoggKatalog = 'c:\\temp\\'\n ,\n [Parameter(Mandatory=$False,Position=5)]\n [string]$FilAndelseExcl1 = 'dummy1'\n ,\n [Parameter(Mandatory=$False,Position=6)]\n [string]$FilAndelseExcl2 = 'dummy2'\n ,\n [Parameter(Mandatory=$False,Position=7)]\n [string]$Visa\n ,\n [Parameter(Mandatory=$False,Position=7)]\n [string]$Driver = 'E'\n)\n\n#Interna parametrar\n#Används för att skriva dag i logg-filen\n$DagSkrivit =1\n$zipade_filer = \"zipade_filer.txt\"\n$deletade_filer = \"deletade_filer.txt\"\n$deletade_kataloger = \"deletade_kataloger.txt\"\n#räknare för att hålla reda på hur många filer som zip/delatas\n$CountFiles = 0\n$CountFolder = 0\n$CountFiles_zip = $False\n$CountFiles_del = $False\n$CountKatalog= $False\n\n#7Zip-lokalt\n$7zipPath = \"C:\\Program Files\\7-Zip\\7z.exe\"\n#$7zipPath = \"E:\\Appl\\7-Zip\\7z.exe\"\nif (-not (Test-Path -Path $7zipPath -PathType Leaf)) {\n\tNew-Item $LocalPath\\ERROR_$prog\n\tSet-Content $LocalPath\\ERROR_$prog \"$prog : $idag_tid : 7-zip Error Error: 7 zip file '$7zipPath' not found. $_.Exception.Message\"\n throw \"7 zip file '$7zipPath' not found\"\n}\nSet-Alias 7zip $7zipPath\n\nif($Visa)\n{\n write-host \"Fil som skall deletas/Zipas i katalog status: $RensaEllerZipa \"\n write-host \"logfils katalog: $LoggKatalog\"\n write-host \"loggarnas tid att spara: $DagarAttSpara\"\n}\n\n#Ta fram datum, till att tidsstämpla filerna\n$idag = Get-Date -Format \"yyyyMMdd\"\n$idag_date = Get-Date -Format \"yyyy-MM-dd\"\n$igar = (Get-Date).AddDays(-1)\n$igar_date = (Get-Date).AddDays(-1)\n$igar = Get-Date $igar -Format \"yyyyMMdd\"\n$igar_date = Get-Date $igar_date -Format \"yyyy-MM-dd\"\n$TvaDagar = (Get-Date).AddDays(-2)\n$TvaDagare_date = (Get-Date).AddDays(-2)\n$TvaDagar = Get-Date $TvaDagar -Format \"yyyyMMdd\"\n$TvaDagare_date = Get-Date $TvaDagare_date -Format \"yyyy-MM-dd\"\n$ar = Get-Date -Format \"yyyy\"\n$manad = Get-Date -Format \"MM\"\n$ArManad = $ar+$manad\n$idag_tid = Get-Date -Format \"yyyyMMdd-HH:mm:ss\"\n$two_weeks_ago = Get-Date\n$two_weeks_ago = $two_weeks_ago.AddDays(-14).ToString(\"yyyy-MM-dd\")\n$prog=$MyInvocation.MyCommand.Name\n\n \n######################################################################################################################\n# Avsnitt där kontroll att katalog finns och avslutas med \\\n#\n#####################################################################################################################\n#Se till att katalog att rensa avslutas med \\ och att katalog för städning\\zip:A finns, annars avsluta. Kolla om det skall renas eller zip:as\n#$isFolder = Test-Path $KatalogAttRensa -PathType Container\n$isFolderDel = Test-Path $KatalogRensaZipa -PathType Container\n\nif($Visa){write-host \"Katalog att rensa/zip 0=zipa filer, 1=deleta, inskickat värde: $RensaEllerZipa \"} \nif($Visa){write-host \"Katalog rensa: $KatalogRensaZipa\"} \nif($Visa -and $RensaEllerZipa -eq 1){write-host \"StartKatalog att rensa innan koll: $KatalogRensaZipa\"} \nif($Visa -and $RensaEllerZipa -eq 0){write-host \"StartKatalog att zipa innan koll: $KatalogRensaZipa\"} \n\nif ($isFolderDel -eq $True ) {\n if ($KatalogRensaZipa.EndsWith('\\') -eq $false) {\n $KatalogRensaZipa += '\\'\n }\n} \nelse {\n if($Visa) {write-host \"Katalog att rensa/Zipa: $KatalogRensaZipa, finns ej så program avslutas.\"}\n exit\n}\nif($Visa) {write-host \"Katalog att rensa: $KatalogRensaZipa\"}\n\n#Se till att katalog där loggning skall ske till avslutas med \\ och finns, annars så skapas katalogen.\n$isLogFolder = Test-Path $LoggKatalog -PathType Container\nif($Visa) {write-host \"Katalog som loggfil skrivs till: $LoggKatalog\"}\n\nif ($isLogFolder -eq $True) {\n if ($LoggKatalog.EndsWith('\\') -eq $false) {\n $LoggKatalog += '\\'\n }\n} \nelse {\n if($Visa) {write-host \"Katalog att skriva logfil till: $LoggKatalog, finns ej så katalog skapas.\"}\n\n New-Item -ItemType Directory -Force -Path $LoggKatalog\n #även se till att katalogen avslutas med \\\n if ($LoggKatalog.EndsWith('\\') -eq $false) {\n $LoggKatalog += '\\'\n }\n}\nif($Visa) {write-host \"logkatalog avslutas nu med: $LoggKatalog\"}\n\n################################################################################################################################\n# Filer: rensning eller zip\n###############################################################################################################################\n\n#Ta fram filer att rensa även från underkataloger -Recurse. -Force undantrycka fel -File för att enbart ta med filer.\n#$oldFiles = Get-ChildItem -Path $KatalogAttRensa -include *.$FilAndelse -File -Recurse -Force \n$oldFiles = Get-ChildItem -Path $KatalogRensaZipa -Exclude *.$FilAndelseExcl1, *.$FilAndelseExcl2 -File -Recurse\n\nif($Visa -and $RensaEllerZipa -eq 1 -and $oldFiles){write-host \"Filer/kataloger skall deletas: $oldFiles\"} ElseIf($Visa -and $RensaEllerZipa -eq 0 -and $oldFiles){write-host \"Filer skall zipas: $oldFiles\"} Else{ if($Visa){write-host \"Det här gick ju inte bra = ingen träfflista\"} Exit}\n\n#loopa igenom fil listan och se vilka filer som skall tas bort = ädre än antalet dagar enl inparametern.\nforeach ($oldFile in $oldFiles) {\n\n#koll om parameter för att filer skall zipas är satt + koll att filen inte redan är zipad\n if($RensaEllerZipa -eq 0 -and $oldFile -notmatch \".zip\"){\n #kolla om det är en fil eller katalog\n if($Visa) {write-host \"Fil som kollas: $oldFile\"}\n $isFil = (!$oldFile.PSIsContainer)\n #$isFolder = Test-Path $KatalogCopFran -PathType Container\n if($Visa) {write-host \"Var det en fil: $isFil\"}\n if($Visa) {write-host $oldFile.LastWriteTime}\n if($Visa) {write-host \"Körnings tidpunkt jmf: \" (Get-Date).AddDays(-$DagarAttSpara)}\n\n #Prep för omdöpning av filändelse byte till .zip\n $file_zipped = $oldFile\n\t $newExtension = \"zip\"\n\t $file_zipped = [io.path]::ChangeExtension($file_zipped,$newExtension)\n\t $file_zipped_path = $file_zipped\n\t if ($Visa) { Write-Output \"Visa: KatalogRensaZipa: $KatalogRensaZipa\" }\n if ($Visa) { Write-Output \"Visa: file_zipped_path $file_zipped_path\" }\n if ($Visa) { Write-Output \"Visa: localfile: $oldFile\" }\n\t if ($Visa) { Write-Output \"Visa: KatalogRensaZipa localFile: $KatalogRensaZipa$oldFile\" }\n if ($Visa) { Write-Output \"Visa: KatalogRensaZipa sökväg: $file_zipped_path\" }\n if ($Visa) { Write-Output \"Visa: Del av filnamn: $file_zipped\" }\n if ($Visa) { Write-Output \"Visa: Är lastWr vs DagSpara TRUE: \" }\n\n #Fortsätt och verifiera enbart om det är en fil\n if($isFil){\n\n #Skriva dag i logg-filen för rensade filer.\n if($DagSkrivit){Get-Date -Format \"yyyy-MM-dd HH:mm\" | Out-File $LoggKatalog\\$ArManad'_'$zipade_filer -Append}\n #Bara skriva dag i filen en gång.\n $DagSkrivit=0\n\n #om filen är äldre än angivet antal dag = zip:a filen\n if($oldFile.LastWriteTime -lt (Get-Date).AddDays(-$DagarAttSpara)) {\n\n if($Visa) {write-host \"Fil som skall zip:as: $oldFile\"}\n if($Visa) {write-host \"Program som kör: $prog\"}\n if($Visa) {write-host \"sökväg: $oldFile\"}\n if($Visa) {write-host \"filens tid: \" $oldFile.LastWriteTime}\n if($Visa) {write-host \"dagar bakåt: \" (Get-Date).AddDays(-$DagarAttSpara)}\n\n #zip:ar filen till samma katalog och sedan rensa bort orginal filen.\n 7zip a -sdel $file_zipped_path $oldFile \n\n #Räkna antalet filer som zip:as och sätta att filer har zip:as.\n $CountFiles +=1\n $CountFiles_zip = $True\n\n if ($? -ne \"True\")\n {\n Write-Error \"$prog : $idag_tid : Problem med 7-zip\"\n\t\t\t New-Item $LocalPath\\ERROR_zip_$localFile\n\t\t\t Set-Content $LocalPath\\ERROR_zip_$localFile \"$prog : $idag_tid : Problem med att använda 7-zip\"\n\t\t\t continue\n }\n\t if ($Visa) { Write-Output \"Visa: file_zipped_path: $oldFile\" }\n\n $oldFile.FullName | Out-File $LoggKatalog\\$ArManad'_'$zipade_filer -Append\n \n }\n else {\n if($Visa) {write-host \"Fil var inte tillräckligt gammal: $oldFile\"}\n }\n }\n else {\n\n if($Visa) {write-host \"Detta var ingen fil: $oldFile\"}\n }\n \n }\n\n #Filerna skall rensas\n Elseif($RensaEllerZipa -eq 1){\n #kolla om det är en fil eller katalog\n if($Visa) {write-host \"Fil som kollas: $oldFile\"}\n $isFil = (!$oldFile.PSIsContainer)\n #$isFolder = Test-Path $KatalogCopFran -PathType Container\n if($Visa) {write-host \"Var det en fil: $isFil\"}\n\n #Fortsätt och verifiera enbart om det är en fil\n if($isFil){\n\n #Skriva dag i logg-filen för rensade filer.\n if($DagSkrivit){Get-Date -Format \"yyyy-mm-dd HH:mm\" | Out-File $LoggKatalog\\$ArManad'_'$deletade_filer -Append}\n #Bara skriva dag i filen en gång.\n $DagSkrivit=0\n\n #om filen är äldre än angivet antal dag = deleta\n if($oldFile.LastWriteTime -lt (Get-Date).AddDays(-$DagarAttSpara)) {\n\n if($Visa) {write-host \"Fil som skall deletas: $oldFile\"}\n Remove-Item $oldFile.FullName -Force\n $oldFile.FullName | Out-File $LoggKatalog\\$ArManad'_'$deletade_filer -Append\n\n #Räkna antalet filer som deletas och sätta att filer har deletats.\n $CountFiles +=1\n $CountFiles_del = $True\n \n }\n else {\n if($Visa) {write-host \"Fil var inte tillräckligt gammal: $oldFile\"}\n }\n }\n else {\n\n if($Visa) {write-host \"Detta var ingen fil: $oldFile\"}\n }\n\n }\n Else {\n {write-host \"Ingen parameter för katalog att rensa i eller zipa har angets, programmet bör redan ha avslutats vid katalog kontrollen!!!!!!!!!\"}\n exit\n }\n}\n\n#kolla tillgänglig volym på E:\\\n#$vDisk = Get-PSDrive K | Select-Object Used,@{'Name' = 'Free (GB)'; Expression= { [int]($_.Free / 1GB) }}\n$vDisk = [math]::Round((Get-Volume -DriveLetter $Driver).SizeRemaining / 1GB) \nif($Visa) {write-host \"utrymme kvar på E: \" $vDisk '(GB)'}\n\nif($RensaEllerZipa -eq 0) {\"Antal filer som Zip:ats: \" + $CountFiles | Out-File $LoggKatalog\\$ArManad'_'$zipade_filer -Append}\nif($RensaEllerZipa -eq 0){\"Plats kvar på E:\\ \" + $vDisk +\" GB\" | Out-File $LoggKatalog\\$ArManad'_'$zipade_filer -Append}\n\nif($RensaEllerZipa -eq 1) {\"Antal filer som deletats: \" + $CountFiles | Out-File $LoggKatalog\\$ArManad'_'$deletade_filer -Append}\nif($RensaEllerZipa -eq 1){\"Plats kvar på E:\\ \" + $vDisk +\" GB\"| Out-File $LoggKatalog\\$ArManad'_'$deletade_filer -Append}\n\n####################################################################################################################\n# Rensa kataloger\n###################################################################################################################\n\n#Ta fram kataloger att rensa även från underkataloger -Recurse. Sort-Object -Property $KatalogAttRensa.FullName. Beroende på om parameter för zip eller rensning är satt.\n$oldKatalogs = if($RensaEllerZipa -eq 1){Get-ChildItem -Path $KatalogRensaZipa -Directory -Recurse} else {write-host \"Kataloger skall inte deletas\"}\n#Sorterar efter folder djup. *Används i foreach-loop istället.\n#$oldKatalogs | Select-Object FullName | Sort-Object -Descending FullName\n#$oldKatalogs | Select-Object FullName, @{Name=\"FolderDepth\";Expression={$_.DirectoryName.Split('\\').Count}} | Sort-Object -Descending FolderDepth,FullName\nif($Visa) {write-host \"Kataloger att ev rensa: $oldKatalogs\"}\n\n#Sätta om parameter för skrivning till fil iom nu kollar vi på kataloger\n$DagSkrivit=1\n#Skriva dag i logg-filen för rensade Kataloger.\nif($DagSkrivit){Get-Date -Format \"yyyy-MM-dd HH:mm\" | Out-File $LoggKatalog\\$ArManad'_'$deletade_kataloger -Append}\n#Bara skriva dag i filen en gång.\n$DagSkrivit=0\n\n#loopa igenom katalogl listan och se vilka kataloger som skall tas bort = ädre än antalet dagar enl inparametern.\nforeach ($oldkat in ($oldKatalogs | Sort-Object -Descending FullName) ) {\n\n #test om det är en katalog\n if($Visa) {write-host \"Katalog som kollas: $oldkat\"}\n # ev använda denna: $isFil = (!$oldFile.PSIsContainer)\n $isFolder = Test-Path $oldkat.FullName -PathType Container\n if($Visa) {write-host \"Var det en katalog: $isFolder\"}\n\n #Räkna antalet filer som ev finns kvar i katalogen som deletas + ev subkataloger.\n $AntFiler = (Get-ChildItem $oldKat.FullName -File -Recurse).Count \n if($Visa) {write-host \"Frågan är om jag räknar: $AntFiler\"}\n\n #Koll om det är en katalog, koll om det finns filer kvar: $AntFiler från ovan, koll om katalogen är tillräckligt gammal för rensning.\n #iom borde bara vara kataloger.\n if ( ($isFolder -eq $True) -and ($oldkat.LastWriteTime -lt (Get-Date).AddDays(-$DagarAttSpara)) -and ($AntFiler -eq 0) ) {\n\n if($Visa) {write-host \"Katalog som skall deletas: $oldkat\"}\n Remove-Item $oldkat.FullName -Force -Recurse #-and ($AntFiler -eq 0) \n \n #Räkna antalet filer som zip:as och sätta att filer har zip:as\n $CountFolder +=1\n $CountKatalog = $True\n\n $oldkat.FullName | Out-File $LoggKatalog\\$ArManad'_'$deletade_kataloger -Append\n } \n else {\n\n if($Visa) {write-host \"Katalog var inte tillräckligt gammal för att deletas eller innehåller filer i katalog/subkatalog: $oldkat\"}\n }\n\n #Bara skriva dag i filen en gång.\n $DagSkrivit=0\n}\nif($CountKatalog) {\"Antal kataloger som deletats: \" + $CountFolder | Out-File $LoggKatalog\\$ArManad'_'$deletade_kataloger -Append} else {\"Antal kataloger som deletats: 0\" | Out-File $LoggKatalog\\$ArManad'_'$deletade_kataloger -Append}\n\n<\/code><\/pre>","upvoteCount":0,"datePublished":"2022-05-20T02:51:06.000Z","url":"https://community.spiceworks.com/t/script-to-delete-files/833107/8","author":{"@type":"Person","name":"erland41","url":"https://community.spiceworks.com/u/erland41"}}]}}
Neally
(Neally)
May 18, 2022, 3:20pm
2
Should be pretty easy to build yourself.
You can use ‘get-childitem’ to gather the files and you can exclude file types
Get-ChildItem D:\Temp\ -Recurse -Exclude *.html,*.xml
from there you use ‘remove-item’
Give it a try.
if you get stuck, feel free to post the code you have tried. Test it on a test folder first.
If you post code, please use the ‘Insert Code’ button. Please and thank you!
Hi, and welcome to the PowerShell forum!
Don’t apologize for being a “noob” or “newbie” or “n00b.” There’s just no need – nobody will think you’re stupid, and the forums are all about asking questions. Just ask!
Use a descriptive subject. Don’t say “Need help” or “PowerShell Help”, actually summarize what the problem is. It helps the rest of us keep track of which problem is which.
Don’t post massive scripts. We’re all volunteers and we don’t have time to read all that, nor will we copy…
3 Spice ups