.bat文件自动将列添加到管道csv并填充今天的日期

时间:2018-01-03 11:58:45

标签: csv batch-file

我是.bat文件的新手,并兴奋地创建了一些来复制,移动和重命名文档。

尽管进行了搜索,我仍然遇到了一个更复杂的命令,主要是因为我试图修改的文档是管道分隔的而不是正常的' CSV ...

我的问题:我可以,如果可以的话 - 如何使用现有的管道分隔的csv,它始终具有相同的列数,并在其末尾添加一列,其中包含今天的日期(DD / MM / YYYY)每一行?

$ awk -F, 'NF>1{$0 = "\"YYYY-MM-DD\"" FS $0}1' file

sed 'N;s/","/","YYYY-MM-DD HH:MM:SS","/5' file

目前我似乎无法修改文件: - (

1 个答案:

答案 0 :(得分:0)

您的批量尝试并不是那么糟糕:

@echo off
for /f "delims=" %%a in ('type "file.csv"') do (
  >>"fileout.csv" echo.%%a|%time%
)

只需进行一些调整:

@echo off
(for /f "delims=" %%a in (file.csv) do (
  echo(%%a^|%time%
))>"fileout.csv" 
  • for /f能够直接处理文件的内容(不需要type,虽然它可以正常工作)
  • 在循环内重定向(>>)很慢,因为文件将被打开,并在每次写入时关闭(尽管它有效)。只打开/关闭文件(特别是对于大文件),速度要快得多。
  • echo.不安全(虽然在大多数情况下都可以正常使用),但最佳选择是echo(
  • 管道|是一个特殊字符,在这种情况下需要使用插入符号^进行转义。

注意:for /f会跳过空行,因此它们不会出现在新文件中。与行相同,以;(默认EOL)

开头

修改以“将|Date添加到标题”:

@echo off
<file.csv set /p header=
>fileout.csv echo %header%^|DATE
(for /f "skip=1 delims=" %%a in (file.csv) do (
  echo(%%a^|%date%
))>>"fileout.csv" 

<file.csv set /p header=是一种只读取文件的一行(第一行)到变量的方法。用附加的新数据写回来(或保持不变 - 你的评论不是很清楚)。使用skip=1跳过第一行并进行进一步处理 不要忘记将))>"fileout.csv"更改为))>>"fileout.csv"