我有一堆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
答案 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
,那么将显示源文件名而不是文件的序列号(并且可以进行一些其他简化 - 但这是最简单的选择,如果你这样选择)