我有一个电子表格文件夹,所有的开始都是“一周通讯”,然后是日期。例如“24-12-2018周通讯”。我想要做的是一个脚本,找到最新的文件,在同一个文件夹中复制它,并通过添加7天来更改文件名中的日期。
到目前为止,我已经成功地找到了最最新的文件,并将其复制为“周通信测试”,但是我无法找到向文件名添加日期的任何内容。
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有人能帮帮我吗?
发布于 2018-12-22 09:16:32
这将从文件.BaseName属性中捕获字符串日期,将其转换为[datetime]对象,添加7天,将其转换为[向后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输出旧的,然后新的..。
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
}https://stackoverflow.com/questions/53894248
复制相似问题