我有一个电子表格文件夹,所有电子表格都以“ WEEK COMM”开头,然后以日期开头。例如“ WEEK COMM 24-12-2018”。我想要做的是一个脚本,该脚本可找到最新文件,在SAME文件夹中进行复制,并通过添加7天来更改文件名中的日期。
到目前为止,我已经知道了,它可以成功找到最新的文件,并将其复制为“ WEEK COMM TEST”,但是我找不到有关在文件名上添加日期的任何信息。
Get-ChildItem -Path "\\DESKTOP-88SIUP6\Users\User\Desktop\Shared\STOCK ORDERS\2018" |
Sort-Object -Property CreationTime -Descending |
Select-Object -First 1 |
Copy-Item -Destination "\\DESKTOP-88SIUP6\Users\User\Desktop\Shared\STOCK ORDERS\2018\WEEK COMM TEST.xlsx" -Force
有人可以帮助我吗?
答案 0 :(得分:0)
这将从文件.BaseName
属性中捕获字符串日期,将其转换为[datetime]
对象,添加7天,在[向后[ grin < / em>]]格式,然后在文件.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
输出[旧的,然后是新的] ...
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
}