我是.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
目前我似乎无法修改文件: - (
答案 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"
。