
我有多個具有以下結構的 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的這個回答遍歷目錄中的所有檔案來執行您剛剛建立的任務。你將需要目錄功能和一個 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