我有一组CSV文件都具有包含日期的特定名称(例如Reserve013112-sheet1.csv
,Reserve013112-sheet2.csv
)。
所有文件在"保留"之后的文件名中都有一个日期。字。我想提取该日期(以日期格式)并将列添加到现有CSV(可能将其作为.csv
文件中的第一列插入),如下所示:
旧文件:
number,status,reserve,open,code
110035,OPEN,250000,yes,no,12
110056,AUTO,30000,no,yes,0
...
新文件:
date,number,status,reserve,open,code
01-31-2012,110035,OPEN,250000,yes,no,12
01-31-2012,110056,AUTO,30000,no,yes,0
...
我想自动执行此操作(可能使用批处理文件)。
我有一个脚本已经将我现有的Excel文件转换为csv
文件,我希望在将日期添加到每个文件的脚本之前在批处理文件中运行。
答案 0 :(得分:0)
与许多文本处理任务一样,通过良好的正则表达式实用程序,可以使作业简单有效。一个很好的选择是JREPL.BAT,一个纯脚本(混合JScript /批处理)实用程序,可以在XP以后的任何Windows机器上本机运行。
下面的解决方案首先使用FOR列出*reserve*.csv
文件。
接下来,它使用FOR / F和JREPL.BAT来解析文件名中的月,日和年。如果未找到值,则跳过该文件。
最后,它使用另一个JREPL.BAT调用来插入" date,"在第一行的开头,或者" mm-dd-20yy,"在所有其他行的开头。最后一个命令使用输出/O -
选项用结果覆盖原始文件。
@echo off
for /f "eol=: delims=" %%F in (
'findstr /vin "^date," *reserve*.csv'
) do for /f "tokens=1-3" %%A in (
'echo %%F^|jrepl "^.*Reserve(\d\d)(\d\d)(\d\d).*" "$1 $2 $3"'
) do call jrepl "^" "(ln==1)?'date,':'%%A-%%B-20%%C,'" /j /f "%%F" /o -
上面有一个潜在的问题 - 它会修改一个文件,即使它已经在每一行的开头都有日期。用户提供的更多JSCRIPT可用于防止修改已将日期作为第一列的文件。
@echo off
for /f "eol=: delims=" %%F in (
'findstr /vin "^date," *reserve*.csv'
) do for /f "tokens=1-3" %%A in (
'echo %%F^|jrepl "^.*Reserve(\d\d)(\d\d)(\d\d).*" "$1 $2 $3"'
) do call jrepl "^" "(ln==1)?'date,':'%%A-%%B-20%%C,'" /j /f "%%F" /o - ^
/jbegln "if (ln==1 && $txt.search(/^date,/i)>=0) skip=true"