Предположим, у меня есть файл CSV, сгенерированный ежедневной датой.
Например: Файл_1_20220321.CSV
Как использовать Powershell, чтобы изменить год на 2015, чтобы имя файла было:
Например: Файл_1_20150321.CSV
@Theo Есть ли способ, как я могу сделать это автоматически, вместо того, чтобы вручную переименовывать дату каждый год? Например, когда будет 2023 год, он переименует год в 2016.
Пожалуйста, посмотрите мой ответ
Если вы автоматически генерируете дату для csv-файла через
Get-Date -uformat "%m%d%Y"
что является наиболее логичным способом сделать это для чистого форматирования, вы можете просто добавить еще один параметр:
Get-Date -uformat "%m%d%Y" -year "2015"
Следовательно, способ экспорта вашего журнала будет следующим:
$dateold = Get-Date -uformat "%m%d%Y" -year "2015"
Export-Csv -Path "C:\yourpath\filename_$dateold.csv" -InputObject $myobject
Чтобы автоматизировать переименование файла с сегодняшней датой в имени на дату 7-летней давности, можно сделать следующее:
$today = Get-Date
$filter = '*_{0:yyyyMMdd}.csv' -f $today
Get-ChildItem -Path 'X:\somewhere' -Filter $filter -File |
Rename-Item -NewName { $_.Name -replace "_$($today.Year)", "_$($today.AddYears(-7).Year)"} -WhatIf
Я добавил переключатель безопасности -WhatIf
в командлет Rename-Item.
Это делает команду только показать в консоли, что и бы, и ничего фактически не переименовывается. Как только вы убедитесь, что код переименуется правильно, удалите этот переключатель -WhatIf
и запустите снова.
Если даты в замене должны быть действительный (например, когда сегодня будет 29 февраля, а если изменить год на 7 лет назад, вы получите неверную дату), используйте этот код:
$today = Get-Date
$todayPattern = '{0:yyyyMMdd}'-f $today
$olderPattern = '{0:yyyyMMdd}'-f $today.AddYears(-7)
$filter = '*_{0:yyyyMMdd}.csv' -f $today
Get-ChildItem -Path 'X:\somewhere' -Filter $filter -File |
Rename-Item -NewName { $_.Name -replace "_$todayPattern", "_$olderPattern"} -WhatIf
Get-Item -Path 'X:\somewhere\File_1_20220321.CSV' | Rename-Item -NewName { $_.Name -replace '_2022', '_2015'}