Копирование и переименование даты в имени файла + 7 дней.(PowerShell) - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть папка электронных таблиц, которые начинаются с "WEEK COMM" и затем даты.Например, "НЕДЕЛЯ КОММ 24-12-2018".Я ищу скрипт, который находит последний файл, делает его копию в той же папке и изменяет дату в имени файла, добавляя 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 голосов
/ 22 декабря 2018

это будет захватывать строковую дату из свойства файла .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
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...