2014-08-31 156 views
1

我有多个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 2014-08-31 20:12:26

+0

的格式是一致的? – jpw 2014-08-31 20:44:11

+0

是的,他们总是遵循这些模式。 – 2014-08-31 20:45:02

回答

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 

干杯,G

+0

感谢您的回答。我如何将此应用于目录中的所有csv文件? – 2014-08-31 20:54:22

+0

根据您的要求更新了答案。 – gbabu 2014-08-31 21:27:36

+0

我想我在做这件事的时候做了一些不正确的事情。我应该在哪里指定目录?我从csv文件的目录中运行这个,但是我得到了这个消息:%% x在这个时候是意外的。我正在运行win7,所以我有Power Shell [运行它没有问题] – 2014-08-31 22:29:45

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位正则表达式替换也可以在目录的所有CSV文件上用Notepad ++执行。

1

下面的批处理文件应该运行得更快,因为它不使用任何外部文件(如470KB大小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 2014-09-02 13:06:10