變更多個 CSV 檔案中的日期時間格式

變更多個 CSV 檔案中的日期時間格式

我有多個具有以下結構的 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           
    }

它能做什麼

  1. 迭代給定資料夾中的每個檔案並僅過濾 CSV 文件
  2. 讀入每個 CSV 並循環遍歷每一行
  3. 將每一行拆分為一個陣列。逗號是我們的分隔符
  4. 將日期字串轉換01/27/2001 01:00:00 PM為 PowerShell 日期物件。
  5. 格式化日期物件並將其寫入數組中。[2]代表第三個值/列,因為我們從零開始計數
  6. 連接當前行的所有值以獲得單一字串。使用逗號作為分隔符
  7. 將所有行新增到一個陣列中,以便我們可以將它們一次全部寫入一個檔案中
  8. 繼續處理下一個 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

相關內容