У меня есть сценарий в PowerShell, который сканирует каталог папок, имена которых названы по следующему соглашению: yyyymmdd. Он сканирует каталог и находит все папки, которые являются текущими, и до одной недели, а затем копирует их в другой каталог. После того, как он скопирует их в другой каталог, я хотел бы, чтобы он удалял папки в новом каталоге, которые называются одинаково и старше 18 месяцев. Будет ли простой способ сделать это? Я вставил скрипт ниже.Удаление файлов с помощью сценария PowerShell
$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
У меня есть папки, которые не обязательно следуют этому соглашению имен. Как я могу заставить сценарий игнорировать их и сосредоточиться только на файлах, которые соответствуют названию? –
Если вы можете привести несколько примеров, чтобы показать эту идею. До сих пор я могу только подумать о проверке того, действительно ли ParseExact смог получить дату из имени папки. –