0

我很想知道可能的方法來回顯文件夾和子文件夾中的文件,並生成一個輸出文件名,這些文件名被拾取刪除X天。PowerShell腳本從文件夾和子文件夾回顯文件,然後在X天內刪除文件舊

我想在兩個不同的層次

1級寫這個劇本: PowerShell腳本只呼應的文件名,並給我的文件,這些文件已被確定要刪除的輸出。這應該包括文件夾和子文件夾。

級別2: 通過添加刪除功能來合併level1腳本,這會刪除文件夾和子文件夾中的文件。

我有一個移動腳本和一個直接腳本來刪除,但我想確保選擇正確的文件,我想知道正在被刪除的文件名。

任何幫助,高度讚賞。

編輯從評論添加

我一直在嘗試這樣的事情在一個非常簡單的方式

Get-ChildItem -Path c:\test | where {$_.lastWriteTime -lt (Get-Date).addDays(-60)} 

我想添加一些參數,這將產生一個文件名的輸出不同的文件夾位置

+2

請在問題中添加更多內容並顯示您至少已經完成了一些基本的工作。這不是一個人們會爲你寫腳本的地方,但是可以幫助你修復並更好地理解它們。 – 2013-02-19 16:18:03

+0

肯定克里斯托弗......我完全同意你的話,並尊重這個論壇。我不會超越論壇的範圍。我一直在以非常簡單的方式嘗試這樣的東西Get-ChildItem -Path c:\ test | 其中{$ _。lastWriteTime -lt(Get-Date).addDays(-60)}我想添加一些參數,這會在不同的文件夾位置生成文件名輸出。提前致謝..... – user1926332 2013-02-19 17:27:37

+0

這仍然不清楚。你想提供ex。路徑作爲函數參數?輸出結果如何?什麼是「在不同文件夾位置的文件名」?在問題中提供樣本,而不是評論 – 2013-02-19 18:02:16

回答

1

我認爲這是沿着你所需要的東西,我已經向你介紹了一些你可能不知道的概念,比如cmdletbinding,它允許你使用-whatif參數來幹運行你的腳本。您還可以提供-verbose以查看沿途發生的情況,還可以使用Add-Content cmdlet附加到此處的日誌。

所以,你可能像這樣運行:

.\DeleteOldFiles.ps1 -Path c:\test -Age 50 -WhatIf -Verbose 

然後,當你準備刪除,你可以運行它的文件,而不-WhatIf參數:

.\DeleteOldFiles.ps1 -Path c:\test -Age 50 -Verbose 

這不回答所有的問題,但應該幫助你開始,我已經在代碼中提出了很多意見,所以你應該能夠遵循這一切。

# Add CmdletBinding to support -Verbose and -WhatIf 
[CmdletBinding(SupportsShouldProcess=$True)] 
param 
(
    # Mandatory parameter including a test that the folder exists  
    [Parameter(Mandatory=$true)] 
    [ValidateScript({Test-Path $_ -PathType 'Container'})] 
    [string] 
    $Path, 

    # Optional parameter with a default of 60 
    [int] 
    $Age = 60 
) 

# Identify the items, and loop around each one 
Get-ChildItem -Path $Path | where {$_.lastWriteTime -lt (Get-Date).addDays(-$Age)} | ForEach-Object { 

    # display what is happening 
    Write-Verbose "Deleting $_ [$($_.lastWriteTime)]" 

    # delete the item (whatif will do a dry run) 
    $_ | Remove-Item 
} 
0

這個問題有點含糊,但我認爲這就像你想要的東西。
我喜歡David Martin的回答,但根據您的技能水平和需求,它可能有點太複雜。

param(
    [string]$Path, 
    [switch]$LogDeletions 
) 

foreach($Item in $(Get-ChildItem -Path $Path | where {$_.lastWriteTime -lt (Get-Date).addDays(-60)})) 
{ 
    if($LogDeletions) 
    { 
     $Item | Out-File "C:\Deleted.Log" -Append 
    } 
    rm $Item 
} 
相關問題