это будет захватывать строковую дату из свойства файла .BaseName
, преобразовывать ее в объект [datetime]
, добавлять 7 дней, преобразовывать ее в строку даты в вашем [backwards [ grin ]]формат, а затем замените старую строку даты новой строкой даты в .FullName
файла.
, что должно сделать процесс переименования довольно простым и легким.[ ухмылка ]
если бы вы могли, вам, скорее всего, было бы намного легче, если бы вы переключились на более логичный, правильно сортируемый формат yyyy-MM-dd
.возможно, вы не сможете этого сделать, но стоит попробовать ...
$FileName = [System.IO.FileInfo]'WEEK COMM 24-12-2018.xlsx'
$FN_StringDate = $FileName.BaseName.Split(' ')[2]
$FN_Date = [datetime]::ParseExact($FN_StringDate, 'dd-MM-yyyy', $Null)
$NewFN_StringDate = $FN_Date.AddDays(7).ToString('dd-MM-yyyy')
$NewFileName = $FileName.FullName -replace $FN_StringDate, $NewFN_StringDate
$FileName.FullName
$NewFileName
output [old, затем new] ...
D:\Data\Scripts\WEEK COMM 24-12-2018.xlsx
D:\Data\Scripts\WEEK COMM 31-12-2018.xlsx
отредактировать, чтобы добавитьочень конкретный пример.это не проверено, так как у меня нет такого местоположения ... вот почему -WhatIf
там.[ ухмылка ]
$SourceDir = '\\DESKTOP-88SIUP6\Users\User\Desktop\Shared\STOCK ORDERS\2018'
Get-ChildItem -Path $SourceDir |
Sort-Object -Property CreationTime -Descending |
Select-Object -First 1 |
ForEach-Object {
$FN_StringDate = $_.BaseName.Split(' ')[2]
$FN_Date = [datetime]::ParseExact($FN_StringDate, 'dd-MM-yyyy', $Null)
$NewFN_StringDate = $FN_Date.AddDays(7).ToString('dd-MM-yyyy')
$NewFileName = $_.FullName -replace $FN_StringDate, $NewFN_StringDate
# remove the "-WhatIf" when you are ready to do this for real
Copy-Item -LiteralPath $_.FullName -Destination $NewFileName -WhatIf
}