2017-06-12 59 views
0

我見過類似的問題,但我決定發佈,因爲我還沒有看到一個持有我正在尋找的細微差別。以不同的時間間隔與Powershell刪除文件

我正在尋找一種方法來添加一個子句,留下孤獨的空文件,然後用戶維護的某些文件。

  1. 留下任何和所有的空文件夾單獨
  2. 忽略指定的文件夾和文件類型

到目前爲止,我有這樣的:

Start-Transcript C:\Temp3\filecleanup.log -Append 
$folder_path = "[[-Path] <String[K:\]>" 
# replace -90 with days before current date to be deleted 
$1m = "-30" 
$3m = "-90" 
$6m = "-180" 
$12m = "-360" 
$18m = "-540" 
$curr_date = Get-Date 

#script for 30 days 
$del_date1m = $curr_date.AddDays($1m) 
Get-ChildItem $folder_path -Recurse [-Exclude <file folders, Applications, 
*.bat>] | Where-Object { $_.LastAccessTime -lt $del_date1m } | Remove-Item - 
Force -Verbose 

#script for 90 days 
$del_date3m = $curr_date.AddDays($3m) 
Get-ChildItem $folder_path -Recurse [-Exclude <file folders, Applications, 
*.bat>] | Where-Object { $_.LastAccessTime -lt $del_date3m } | Remove-Item - 
Force -Verbose 

#script for 180 days 
$del_date1m = $curr_date.AddDays($6m) 
Get-ChildItem $folder_path -Recurse [-Exclude <file folders, Applications, 
*.bat>] | Where-Object { $_.LastAccessTime -lt $del_date6m } | Remove-Item - 
Force -Verbose 

#script for 360 days 
$del_date1m = $curr_date.AddDays($12m) 
Get-ChildItem $folder_path -Recurse [-Exclude <file folders, Applications, 
*.bat>] | Where-Object { $_.LastAccessTime -lt $del_date12m } | Remove-Item 
-Force -Verbose 

#script for 540 days 
$del_date1m = $curr_date.AddDays($18m) 
Get-ChildItem $folder_path -Recurse [-Exclude <file folders, Applications, 
*.bat>] | Where-Object { $_.LastAccessTime -lt $del_date18m } | Remove-Item 
-Force -Verbose 
Stop-Transcript 
+0

你檢查過腳本嗎? – tukan

回答

0

此腳本使用的所有月份哈希表你必須爲期:

變量$exclude_file_types可以con tain目錄以及像* .bat這樣的文件的結尾。

首先發現非空目錄,然後使用foreach在它們之間循環。第二個循環使用散列表循環所有月份。

編輯:

# if you want to recurse set to true 
$recurse = $true 

$folder_path = 'C:\prg' 
# hash table to access it one month -> $time_definition.1m 
[email protected]{'1m'="-30"; '3m'="-90"; '6m'="-180"; '12m'="-360"; '18m'="-540"} 
Write-host "$time_definition.1m" 

# Directories should be with full path 
$excluded_directories = @("C:\prg\PowerShell\_Snippets\search_files_or_directories\test") 
# Exclude any extension 
$excluded_file_types = @("*.bat", "*.cmd", "*.ps1") 


# Get all non-empty directories 
# If you want to disable the top directory with the whole tree beneath it remove the -Recurse option 
$get_full_directories = Get-ChildItem -Path $folder_path -Recurse:$recurse -exclude $excluded_directories | Where-Object {$_.PSIsContainer -eq $True} | Where-Object {!$_.GetFiles().Count -eq 0} 
#search in those directories for all periods 
foreach ($search_dir in $get_full_directories) { 
    foreach ($time in $time_definition.GetEnumerator()) { 
     # to check 
     #write-host 'time_months:'$($time.Name); 
     write-host 'Currently writing for these months:'$($time.Name); 
     Get-ChildItem -Path $search_dir -recurse -exclude $excluded_file_types | Where-Object {$_.PSIsContainer -eq $FALSE} | where {$_.LastAccessTime -lt (get-date).adddays($time_definition.$($time.Name))} | Remove-Item -Force -Verbose 
    } 
} 

我已經測試的所有代碼,除了最後一個管道| Remove-Item -Force -Verbose但應該工作得非常好。