如何打开当前目录中的每个CSV文件,并使用自动脚本基于CSV文件名添加数据列

时间:2015-08-19 15:45:14

标签: excel batch-file

我有一组CSV文件都具有包含日期​​的特定名称(例如Reserve013112-sheet1.csvReserve013112-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文件,我希望在将日期添加到每个文件的脚本之前在批处理文件中运行。

1 个答案:

答案 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"