#powershell
#powershell
Вопрос:
У меня есть текстовый файл
11/11/2020 11:23:45 Text2 12345
Текст 2020-11-25 11:23:46 12345
Я перебираю текстовый файл, и мне нужен вывод для строки 1 как 11/11/2020 11:23:45, указав формат даты как «ММ / дд / гггг ЧЧ: мм: сс», а для строки 2 как 2020-11-25 11:23:46, указав формат даты как «гггг-дд-ММЧЧ: мм: сс «
$pattern = "MM/dd/yyyy HH:mm:ss"
$dateString = 11/11/2020 11:23:45 Text2 12345
$date = [datetime]::ParseExact($dateString,$date_format,$null)
Я не могу использовать регулярные выражения, поскольку в текстовом файле может быть довольно мало форматов даты, а ParseExact не работает, поскольку строка имеет другие значения в сочетании с датой.
Пожалуйста, помогите!!
Ответ №1:
Я предлагаю использовать switch
оператор с параметрами -File
and -Regex
:
# Sample input file.
$file = './sample.txt'
# Add sample data to the file.
@'
11/11/2020 11:23:45 Text2 12345
Text 2020-11-25 11:23:46 12345
'@ > $file
# Read the file line by line, and perform regex matching on each.
# Convert each match to a [datetime] instance by casting and output it.
switch -Regex -file $file {
'bd{2}/d{2}/d{4} d{2}:d{2}:d{2}b' { # MM/dd/yyyy HH:mm:ss
[datetime] $Matches[0]
}
'bd{4}-d{2}-d{2} d{2}:d{2}:d{2}b' { # yyyy-dd-MM HH:mm:ss
[datetime] $Matches[0]
}
}
Обратите внимание, что оба формата в строках примера могут быть преобразованы напрямую [datetime]
.
Если существуют дополнительные форматы, которые не могут, выполните ::ParseExact()
вызов в соответствующих обработчиках ветвей.
Вышеуказанные результаты (в моей en-US
системе):
Wednesday, November 11, 2020 11:23:45 AM
Wednesday, November 25, 2020 11:23:46 AM
Ответ №2:
Сделайте это, разделив:
(Get-Content "FILEPATH")|Foreach{
$_.split(" ")[0..1] -join " "
}
Комментарии:
1. Привет, спасибо, и это работает, если дата находится в позициях 0 и 1, в этом случае дата может быть в любой другой позиции с любым заданным форматом.