Когда вы имеете дело с объектами DateTime, вы должны использовать их как таковые. Вы можете вычислить или даже сравнить их гораздо проще, чем в виде строк. Я думаю, это сделает вашу жизнь намного проще. Это будет быстрее, когда вы сначала соберете все необходимые данные, а затем сохраните их в файл за один раз.
$fileList = Get-ChildItem "C:\Results\*.csv"
foreach($file in $fileList) {
$csv = Import-CSV -Path $file.FullName -Delimiter "`t"
$NewData = foreach($Data in $csv){
$Data |
Select-Object -Property *,
@{
Name = 'NewDateAndTime';
Expression = {
$DateTime = [DateTime]::ParseExact($($Data.'Date and Time'),"MM/dd/yyyy HH:mm:ss",$null)
$DateTime.AddHours(-4)
}
}
}
$NewData | Export-Csv -Path "C:\PerfResults\NewFiles\$($file.BaseName)-NEW.csv" -Delimiter "`t" -NoTypeInformation -Force
}
Если вам не нужны все данные из входного csv в выходном csv, вы можете выбрать те, которые вам нужны, с помощью Select-Object
.
Редактировать: дополнительное объяснение - я преобразовал "строковые" дату и время из CSV-файла в DateTime
объект с вычисляемым свойством. Затем я вычел 4 часа, чтобы показать, как рассчитать с DateTime
объектами. Конечно, вы должны адаптировать его к вашим особым потребностям. ;-)