GOOGLE ADS

понедельник, 25 апреля 2022 г.

PowerShell вставляет строку в имя файла непосредственно перед расширением

Общая вещь, которую мне нужно много сделать с файлами, - это создать/сослаться на резервную версию файла. например, я мог бы захотеть иметь версию файла с отметкой даты/времени, чтобы я мог ссылаться как на исходный отчет, так и на резервную версию в сценарии:

$now = $(Get-Date -format "yyyy-MM-dd__HH-mm")
$ReportName = "MyReport-en.csv"
$Backups = "D:\Backups\Reports"

Я обнаружил, что использование -joinили +всегда вставка пробела перед отметкой даты/времени:

$ReportBackup = "$Backups\$($ReportName -split ".csv")" + "_$now.csv"
$ReportBackup = "$Backups\$($ReportName -split ".csv")" -join "_$now.csv"

Я нашел способ сделать это, но он выглядит неэффективным с тройкой $и дублированием.csv

$ReportBackup = "$Backups\$($($ReportName -split ".csv")[0])$_now.csv"

что приводит к:

$ReportBackup => D:\Backups\Reports\MyReport-en_2022-04-15__07-55.csv

Можете ли вы придумать более простой/чистый способ достижения общей цели вставки фрагмента текста перед расширением без тройного $или дублирования расширения? («Использовать $name = "MyReport-en"«» не так полезно, потому что часто я читаю файловый объект и получаю имя с расширением.


Решение проблемы

$now = Get-Date -Format "yyyy-MM-dd__HH-mm"
$reportName = "MyReport-en.csv"
$backups = "D:\Backups\Reports"
$reportBackup = Join-Path $backups $reportName.Replace(".csv","_$now.csv")
$reportBackup

PS Нет никаких рисков использования .Replace(), если вы знаете, как это работает. Этот метод чувствителен к регистру и заменяет все вхождения. В данном конкретном случае мы заранее точно знаем имя, поэтому можем безопасно использовать этот метод.

Название «My.csvReport-en.csv» — это ерунда, но если бы проблема явно относилась к универсальному решению «любое-имя.ext»:

$reportName = "My.aSd_Report-en.aSD"
$backups = "D:\Backups\Reports"
$reportBackup = Join-Path $backups ($reportName -replace "(?=\.[^.]+$)", (Get-Date -Format "_yyyy-MM-dd__HH-mm"))
$reportBackup

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...