2014-08-31 2 views
1

У меня есть несколько файлов CSV с этой структурой:Изменение формата даты и времени в CSV-файлов

text, text, 01/27/2001 01:00:00 PM 

мне нужно обновить все CSV-файлы с помощью этого формата даты и времени:

text, text, 27-Jan-2001 13:00:00 

Есть ли способ делать это через пакетный файл/другой автоматический способ?

Спасибо,

+0

проверить, если это полезно для вас - http://www.dostips.com/forum/viewtopic.php?f=3&t=4847 – npocmaka

+0

ли формат последовательной? – jpw

+0

Да, они всегда следуют этим образцам. –

ответ

4

Это может быть сделано хорошо в пакетном файле с помощью одной команды powershell. Powershell встроен во все новые ОС (после Win7, Win2008) и может быть установлен на устаревшую ОС.

ниже код и пример вывод -

@echo off 
for /f "delims=" %%x in ('dir /b *.csv') do (
for /f "usebackq tokens=1-3* delims=," %%i in ("%%~fx") do (
for /f "delims=" %%a in ('powershell -command \"{0:dd-MMM-yyyy HH:mm}\" -f [datetime]^('%%k'^)') do >>"%%~nx_new.csv" echo %%i,%%j, %%a 
) 
) 

Испытано выход -

C:\Scripts>type input1.csv 
text, text, 01/27/2001 10:00:00 PM 
text, text, 01/27/2001 11:00:00 AM 
text, text, 01/27/2001 02:00:00 PM 
text, text, 01/27/2001 12:00:00 AM 
text, text, 01/27/2001 01:00:00 PM 
C:\Scripts>type input2.csv 
text, text, 01/27/2001 10:00:00 PM 
text, text, 02/27/2002 11:00:00 AM 
text, text, 03/27/2003 02:00:00 PM 
text, text, 04/27/2004 12:00:00 AM 
text, text, 05/27/2005 01:00:00 PM 

C:\Scripts>draft.bat 


C:\Scripts>type input1_new.csv 
text, text, 27-Jan-2001 22:00 
text, text, 27-Jan-2001 11:00 
text, text, 27-Jan-2001 14:00 
text, text, 27-Jan-2001 00:00 
text, text, 27-Jan-2001 13:00 

C:\Scripts>type input2_new.csv 
text, text, 27-Jan-2001 22:00 
text, text, 27-Feb-2002 11:00 
text, text, 27-Mar-2003 14:00 
text, text, 27-Apr-2004 00:00 
text, text, 27-May-2005 13:00 

Cheers, G

+0

Спасибо за ответ. Как применить это ко всем файлам csv внутри каталога? –

+0

Обновлен ответ согласно вашему требованию. – gbabu

+0

Я полагаю, что я делаю что-то неправильное во время работы. Где я должен указать каталог? Я запускал это из каталога с файлами csv, но я получил это сообщение: %% x в это время было неожиданным. Я запускаю win7, поэтому у меня есть Power Shell [запускается без проблем] –

0

Это может быть сделано с 24 регулярных выражений Perl заменяет в файлах с текстовым редактором UltraEdit положить в макро UltraEdit.

InsertMode 
ColumnModeOff 
HexOff 
PerlReOn 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "01/([0-3]\d)/([12][09]\d\d)" "\1-Jan-\2" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "02/([0-3]\d)/([12][09]\d\d)" "\1-Feb-\2" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "03/([0-3]\d)/([12][09]\d\d)" "\1-Mar-\2" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "04/([0-3]\d)/([12][09]\d\d)" "\1-Apr-\2" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "05/([0-3]\d)/([12][09]\d\d)" "\1-May-\2" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "06/([0-3]\d)/([12][09]\d\d)" "\1-Jun-\2" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "07/([0-3]\d)/([12][09]\d\d)" "\1-Jul-\2" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "08/([0-3]\d)/([12][09]\d\d)" "\1-Aug-\2" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "09/([0-3]\d)/([12][09]\d\d)" "\1-Sep-\2" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "10/([0-3]\d)/([12][09]\d\d)" "\1-Oct-\2" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "11/([0-3]\d)/([12][09]\d\d)" "\1-Nov-\2" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "12/([0-3]\d)/([12][09]\d\d)" "\1-Dec-\2" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "01(:[0-5]\d:[0-5]\d) PM" "13\1" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "02(:[0-5]\d:[0-5]\d) PM" "14\1" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "03(:[0-5]\d:[0-5]\d) PM" "15\1" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "04(:[0-5]\d:[0-5]\d) PM" "16\1" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "05(:[0-5]\d:[0-5]\d) PM" "17\1" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "06(:[0-5]\d:[0-5]\d) PM" "18\1" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "07(:[0-5]\d:[0-5]\d) PM" "18\1" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "08(:[0-5]\d:[0-5]\d) PM" "20\1" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "09(:[0-5]\d:[0-5]\d) PM" "21\1" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "10(:[0-5]\d:[0-5]\d) PM" "22\1" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "11(:[0-5]\d:[0-5]\d) PM" "23\1" 
ReplInFiles MatchCase RegExp Log "C:\Temp\" "*.csv" "([01]\d:[0-5]\d:[0-5]\d) [AP]M" "\1" 

Этот макрос UltraEdit изменяет даты и времени строки во всех файлах CSV в каталоге C:\Temp.

Я не использую Notepad ++. Но я все же думаю, что эти 24 замещения регулярных выражений могут быть выполнены также с Notepad ++ во всех CSV-файлах каталога.

1

Пакетный файл ниже должен работать быстрее, так как он не использует какие-либо внешнее файл (например, размер файла 470 КБ powershell.exe).

@echo off 
setlocal EnableDelayedExpansion 

set i=100 
for %%a in (Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) do (
    set /A i+=1 
    set "month[!i:~1!]=%%a" 
) 

for /F "delims=" %%n in ('dir /A-D /B *.csv') do (
    (for /F "usebackq tokens=1-3 delims=," %%x in ("%%n") do (
     for /F "tokens=1-7 delims=/: " %%a in ("%%z") do (
     set hour=%%d 
     if "%%g" equ "PM" (
      set /A hour=1!hour!+12-100 
      if !hour! equ 24 set "hour=0" 
      if !hour! lss 10 set "hour=0!hour!" 
     ) 
     echo %%x,%%y, %%b-!month[%%a]!-%%c !hour!:%%e:%%f 
    ) 
    )) > "%%~Nn_new.csv" 
) 
+0

Правда. С моим примером ввода выше (input1.csv & input2.csv), «мой скрипт с powershell занял 319 миллисекунд», а «ваш взял 49 миллисекунд» – gbabu

Смежные вопросы