2013-05-02 104 views
1

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

copy *.csv importfile.csv 

所以我需要的1的常数列在CSV-A添加到每一行,2对CSV-B,3对CSV-C等的恒定柱.....合并文件之前。

我相信这是可能的,但我不知道从哪里开始?谁能帮忙?只有建立基本形式的目标文件的目录,/b(文件名 -

另一种选择是.....

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

显示一个例子。 – Endoro 2013-05-02 19:21:25

+0

我只需在我最喜欢的文本编辑器中打开每个CSV文件,然后在每行末尾搜索并替换CarriageReturn + LineFeeds,并使用相同的东西加上一个附加的“1”,等等(手动检查第一行和最后一行)。这样我就会在每一行的开始处结束新的''1',''。 – 2013-05-02 20:38:04

回答

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 

设置目录和文件匹配合适,然后
/a-d忽略目录名称/on按名称的顺序 - 找到".csv"(这将发生在每行中)/i在任何情况下/n并在[] 01中编号- 所述"tokens=1*delims=[]"选项分配数至%% c和文件名%% d

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

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

我假设你需要特别对待第一行。如果你不那么简单REM出了REM关键字(最简单的选项)的SET "firstrow=Y"线

当然,如果你ECHO %%d,%%r,而不是ECHO %%c,%%r然后将源文件名,而不是文件的序列号会出现(和可以做一些其他的简化 - 但如果你这么选择,这是最简单的选择)