复制和重命名日期为文件名+ 7天。 (电源外壳)

时间:2018-12-22 08:49:06

标签: excel powershell date

我有一个电子表格文件夹,所有电子表格都以“ 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

有人可以帮助我吗?

1 个答案:

答案 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
        }