如何使用批处理文件向CSV添加常量值?

时间:2013-05-02 19:01:57

标签: text csv batch-file delimited-text

我有一堆CSV文件,我想在合并它们之前添加一个常量值,以便我知道每行中的哪个CSV文件。我目前正在使用一个简单的批处理文件来合并CSV文件,但我需要一个标识符来对合并后的文件进行排序。

copy *.csv importfile.csv 

所以我需要在CSV-A的每一行中添加一个1的常量列,在CSV-B之前添加一个2的常量列,在合并文件之前添加3到CSV-C等。

我确信这是可能的,但我不知道从哪里开始?有人可以帮忙吗?

另一种选择是......

If any row in column K in CSV-A.csv = "Certain Value" 
change to "1" 
ELSE do nothing 

1 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL
SET "sourcedir=."
SET "filemask=csv*.csv"
(
FOR /f "tokens=1*delims=[]" %%c IN (
   'dir /b /a-d /on "%sourcedir%\%filemask%" ^|find /n /i ".csv"'
   ) DO (
   SET "firstrow=Y"
   FOR /f "usebackqdelims=" %%r IN ("%sourcedir%\%%d") DO (
    IF DEFINED firstrow IF %%c==1 ECHO Sourcefile,%%r
    IF NOT DEFINED firstrow ECHO %%c,%%r
    SET "firstrow="
   )
)
)>importfile.csv

根据需要设置目录和文件掩码,然后
  - 以基本形式构建目标文件的目录/b(仅文件名)/a-d按名称顺序忽略目录名/on   - 在任何情况下".csv"找到/i(每行会发生一次)/n并在[]中对其进行编号   - "tokens=1*delims=[]"选项将数字指定为%% c,将文件名指定给%% d

找到的每个文件,
  - 标记我们正在处理第一行   - 将文件中的每一行读入%% r   - 如果它是文件#1中的第一行,则将“sourcefile”添加到标题行   - 如果它不是第一行,则输出文件#,前缀为行文本   - 清除“第一行”标志

请注意,输出文件名不应与所选的文件掩码匹配。可以生成一个.txt文件,然后重命名它。

我认为你需要特别对待第一行。如果您不这样做,则只需使用SET "firstrow=Y"关键字(最简单的选项)删除REM

当然,如果您ECHO %%d,%%r而不是ECHO %%c,%%r,那么将显示源文件名而不是文件的序列号(并且可以进行一些其他简化 - 但这是最​​简单的选择,如果你这样选择)