1

私はPowerShellスクリプトの初心者なので、冷静になってください^^

ディレクトリ d:\test のファイルを削除したい 15 日以上経過したファイルのみを削除しますが、ディレクトリ d:\test の別のディレクトリにあるファイルは削除したくありません。

私のスクリプト

#----- define parameters -----#
#----- get current date ----#
$Now = Get-Date
#----- define amount of days ----#
$Days = "15"
#----- define folder where files are located ----#
$TargetFolder = "d:\test"
#----- define extension ----#
$Extension = "*.bak"
#----- define LastWriteTime parameter based on $Days ---#
$LastWrite = $Now.AddDays(-$Days)
#----- get files based on lastwrite filter and specified folder ---#
$Nomatch = "d:\test\ZZ - Archives","d:\test\ZZ - Cloture Paye"

$Files = Get-Childitem $TargetFolder -Include $Extension -Recurse | Where {$_.LastWriteTime -le "$LastWrite"} | 
Where-Object {$_.FullName -notmatch "$Nomatch"}

foreach ($File in $Files)
        {
        if ($File -ne $NULL)
            {
            write-host "Deleting File $File" -ForegroundColor "DarkRed"
            Remove-Item $File.FullName | out-null
            }
        else
            {
            Write-Host "No more files to delete!" -foregroundcolor "Green"
            }
        }
4

2 に答える 2

3

Powershell 2.0 を使用している場合、ファイルのみを取得するには:

Get-ChildItem $TargetFolder | Where-Object { ! $_.PSIsContainer }

Powershell 3.0 を使用している場合は、次のようにします。

Get-ChildItem $TargetFolder -File

あなたが望むかどうかわかりません-Recurse。のファイルのみが必要でd:\test、子ディレクトリの下のファイルも必要ない場合は、使用しないでください-Recurse

于 2013-08-26T12:08:11.447 に答える
1

各ファイルにプロパティがあります

PSIsContainer

オブジェクトがディレクトリであり、ファイル コレクションをフィルタリングできるかどうかを示します。

$Files = Get-Childitem $TargetFolder -Include $Extension -Recurse |
where { !$_.PSIsContainer } | ...
于 2013-08-26T11:22:12.107 に答える