Я не думаю, что ранее отвеченный вопрос делает все, что нужно Энди здесь.Когда вы запускаете команду (get-date).getdatetimeformats()
, ничто не соответствует его начальному формату ввода.Следующее должно вывести то, что вы хотите:
"Sat 9th Feb 2019" -replace "(\d+)(th|nd|st|rd)",'$1' | get-date -format "dd/MM/yyyy"
Здесь замена использует регулярное выражение замены, и она не учитывает регистр (\d+)
ищет одну или несколько цифр и называет их группой 1. (th|nd|st|rd)
ищет строки th, nd, st или rd и называет их группой 2. Поскольку эти группы расположены рядом друг с другом, регулярное выражение ожидает одну или несколько цифр, за которыми непосредственно следует одна из четырех строк.$1
- это способ показать только содержимое группы захвата 1. Если взять в качестве примера 24th
, 24
квалифицируется как одна или несколько цифр и называется группой 1. th
квалифицируется как одна из четырехи называется группой 2. Оператор замены заменяет группу 1 и группу 2 просто группой 1. Следовательно, 24-е становится 24.
Вот практический пример вашего сценария:
$CSVData = import-csv X:\Temp\MyCSVFile.csv
PS H:\> $CSVData
Date Data
---- ----
Sat 9th Feb 2019 Data about something
Thu 31st Jan 2019 January data
Sat 2nd Feb 2019 Groundhog Day
Sun 3rd Mar 2019 Beginning of March
PS H:\> $CSVData.date -replace "(\d+)(th|nd|st|rd)",'$1' | get-date -format "dd/MM/yyyy"
09/02/2019
31/01/2019
02/02/2019
03/03/2019
Если вы хотите переформатировать дату вместе с выводом оставшихся данных файла CSV, вы можете выполнить:
PS H:\> $CSVData | select-object @{n='Date';e={$_.date -replace "(\d+)(th|nd|st|rd)",'$1' | get-date -format "dd/MM/yyyy"}},Data
Date Data
---- ----
09/02/2019 Data about something
31/01/2019 January data
02/02/2019 Groundhog Day
03/03/2019 Beginning of March
Если вы намереваетесь обновить файл с недавно отформатированными данными, тогда выможет запустить следующее, чтобы поместить обновления в файл с именем NewCSVFile.csv:
$CSVData | select-object @{n='Date';e={$_.date -replace "(\d+)(th|nd|st|rd)",'$1' | get-date -format "dd/MM/yyyy"}},Data | export-csv C:\Temp\NewCSVFile.csv -notypeinformation