@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
然后将源文件名,而不是文件的序列号会出现(和可以做一些其他的简化 - 但如果你这么选择,这是最简单的选择)
显示一个例子。 – Endoro 2013-05-02 19:21:25
我只需在我最喜欢的文本编辑器中打开每个CSV文件,然后在每行末尾搜索并替换CarriageReturn + LineFeeds,并使用相同的东西加上一个附加的“1”,等等(手动检查第一行和最后一行)。这样我就会在每一行的开始处结束新的''1',''。 – 2013-05-02 20:38:04