1

PowerShell に、yyyymmdd という規則で名前が付けられたフォルダーのディレクトリをスキャンするスクリプトがあります。ディレクトリをスキャンし、現在のものから 1 週間前までのすべてのフォルダを見つけて、それらを別のディレクトリにコピーします。それらを他のディレクトリにコピーした後、同じ名前で18か月以上前の新しいディレクトリ内のフォルダーを削除したいと思います。これを行う簡単な方法はありますか?以下にスクリプトを貼り付けました。

$targetdirectory = "\\DPR320-W12-1600\PRTG"
$sourcedirectory = "C:\Users\Public\Documents\PRTG Traffic Grapher"
$todaysdate=get-date
$minusoneweek=$todaysdate.adddays(-7)
$minusdate=($minusoneweek.Month).tostring(),($minusoneweek.day).tostring(),($minusoneweek.year).tostring()
$todaysdatestring=($todaysdate.Month).tostring(),($todaysdate.day).tostring(),($todaysdate.year).tostring()
$oldfilename=$minusdate[0]+$minusdate[1]+$minusdate[2]+" backup"
$newfilename=$todaysdatestring[0]+$todaysdatestring[1]+$todaysdatestring[2]+" backup"


Get-ChildItem $sourcedirectory\config | Where-Object { 
    $_.PsIsContainer -and 
    $_.BaseName -match '\d{6}' -and 
    ([DateTime]::ParseExact($_.BaseName, 'yyyyMMdd', $null) -gt (Get-Date).AddDays(-7)) 
} |Copy-Item -Recurse -Force -Destination $targetdirectory\$oldfilename\config

Copy-Item -Force $sourcedirectory\config.csv -Destination $targetdirectory\$oldfilename
Copy-Item -Force $sourcedirectory\config.prtg -Destination $targetdirectory\$oldfilename

rename-item $targetdirectory\$oldfilename $newfilename
4

2 に答える 2

0

FoxDeploy との議論に基づいて: これは $YourDirectory をループし、名前が 18 か月より前の日付を表しているかどうかを確認します。ドット形式の名前を除いて、これを自分のクリーンアップに使用しました。

$CleanupList = Get-ChildItem $YourDirectory
$Threshold = (get-date).AddMonths(-18)

foreach ($DirName in $CleanupList)
{
    If (([datetime]::ParseExact($DirName.BaseName,'yyyyMMdd',$null)) -lt $Threshold)
    {
        Remove-Item $DirName.FullName -Force -Recurse
    }
}
于 2016-06-24T16:25:30.713 に答える
0

$targetDirectory削除したいファイル (18 か月以上前のもの) が含まれていると仮定して、これをスクリプトの最後に追加するだけです。

#resolve this day, 18 months ago
$18Months = (get-date).AddMonths(-18)

#get the name in the right format (i.e. 20141224)
$18MonthString = get-date -Date $18Months -UFormat "%Y%m%d"

#find the files with a name like this and delete them
$OldPrtgFiles = dir $targetDirectory | Where Name -like "$18MonthString*" 
$OldPrtgFiles | remove-item -whatif

最初の実行では-WhatIfビューが表示され、削除されるファイルが示されます。これでよろしければ、削除してWhatIfください。

于 2016-06-24T15:09:18.513 に答える