1

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

copy *.csv importfile.csv 

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

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

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

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

1 回答 1

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

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

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

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

我假设您需要特别对待第一行。如果您不这样做,那么只需使用关键字REM-outSET "firstrow=Y"行(最简单的选项)REM

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

于 2013-05-03T01:10:10.500 回答