我有多个具有以下结构的 csv 文件:
text, text, 01/27/2001 01:00:00 PM
我需要用这个日期时间格式更新所有 csv 文件:
text, text, 27-Jan-2001 13:00:00
有没有已知的智能/快速方法可以做到这一点?我尝试将它们导入 Excel,但这是一个单独的任务 [逐个复制/粘贴],所以我认为这不是最好的方法。也许是 Notepadd++ 中的某些功能 [找不到它]
谢谢,
答案1
这是一个 PowerShell 脚本,用于一步更新特定文件夹中的多个 CSV 文件。
ForEach ($file in Get-ChildItem "C:\myFolder" -filter "*.csv"){
Get-Content $file.Fullname | ForEach {
$arLine = $_ -split ","
$date = [DateTime]$arLine[2]
$arLine[2] = $date.ToString(" dd-MMM-yyyy HH:mm:ss")
[array]$arFile += $arLine -join ","
}
$arFile | Out-File $file.Fullname
clear-variable arFile
}
它能做什么
- 遍历给定文件夹中的每个文件并仅过滤 CSV 文件
- 读取每个 CSV 并循环遍历每一行
- 将每行拆分成一个数组。逗号是分隔符
- 将日期字符串转换
01/27/2001 01:00:00 PM
为 PowerShell 日期对象。 - 格式化日期对象并将其写回数组。
[2]
代表第三个值/列,因为我们从零开始计数 - 将当前行的所有值重新连接起来以获得单个字符串。使用逗号作为分隔符
- 将所有行添加到单个数组中,以便我们可以将它们一次性全部写入文件中
- 继续下一个 CSV 文件
答案2
最快的方法是在 VBA Excel 中编写一个宏,打开 csv 文件,更改格式并将其再次保存为 csv 文件。尝试以下操作:
- 在 Excel 中录制宏正是这个任务一csv 文件(开始录制、打开文件、进行格式化并再次保存文件)。
- 使用SU 的这个答案遍历目录中的所有文件来执行你刚刚创建的任务。你需要Dir 函数和一个 While 循环。
因此你的代码将如下所示(未测试!):
Public Sub ChangeDates()
Dim StrFile as String
strFile = Dir("C:\Some\Location\Of\Your\Files\*.csv")
While strFile <> ""
# Append the stuff from the recorded macro here and adjust the filename
# Probably something like:
Workbooks.Open Filename:=strFile
Columns("C:C").Select
Selection.NumberFormat = "dd-mm-yyyy HH:mm:ss" # or something else
ActiveWorkbook.Save
ActiveWorkbook.Close
strFile = Dir
End While
End Sub