【发布时间】:2015-05-21 04:22:15
【问题描述】:
我想使用批处理合并两个相似的 CSV 文件。我找到了一个运行良好的文件,但现在不是。这可能是因为重命名了所使用的 CSV 文件。
我想要下面演示的内容:
文件 1:
name1,group1,data1
name2,group2,data2
name3,group3,data3
文件 2:
name1,group1,data1,time1
name2,group2,data2,time2
合并文件:
name1,group1,data1,time1
name2,group2,data2,time2
name3,group3,data3
(请注意,第四列未填写 name3,因此不在文件 2 中。)
以下代码修改自:http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/MS_DOS/Q_27694997.html。
@echo off
set "tmpfile=%temp%\importlist.tmp"
set "csvfile=importlist.csv"
copy nul "%tmpfile%" >nul
echo.
echo Processing all CSV files...
set "header="
for %%a in (%1) do (
if not "%%a"=="%csvfile%" (
set /p =Processing %%a...<nul
for /f "tokens=1* usebackq delims=," %%b in ("%%a") do (
if /i "%%b"=="Keyword" (
if not defined header (
set /p =Found header...<nul
set "header=%%b,%%c"
)
) else (
title [%%a] - %%b,%%c
findstr /b /c:"%%b" /i "%tmpfile%">nul || echo %%b,%%c>>"%tmpfile%"
)
)
echo OK
)
)
echo Finished processing all CSV files
echo.
echo Creating %csvfile%
echo %header%>"%csvfile%"
set /p =Sorting data...<nul
sort "%tmpfile%">>"%csvfile%"
echo OK
del "%tmpfile%"
echo Finished!
title Command Prompt
exit /b
问题在于,在执行时,它只会创建一个排序后的 CSV,其中包含第一个文件中的所有数据,而不是第二个文件。
我试图通过在参数 (%1 - "directory*.csv") 周围加上引号来使其正常工作,但无济于事。
【问题讨论】:
-
%1和%2是什么意思?请edit您的问题并提供呼叫线路示例,例如myscript.bat "File 1" "File 2"或myscript.bat "c:\myfiles\File 1" "c:\myfiles\File 2"或myscript.bat File1 File2等... -
根据 ExpertsExchange 问题,
%1看起来应该是*.csv,这可以解释for循环。它还可以解释为什么脚本中没有%2,因为你不应该像script.bat file1.csv file2.csv file2.csv那样称呼它。 -
抱歉,我已经编辑过了。命令行是 merge.bat "directory*.csv"
-
抱歉,我只能访问 Experts-Exchange... 所以,我没有费心点击它,还没有。 Mazy 由 OP 引用
%2。 @SomethingDark
标签: csv batch-file windows-7 merge command-prompt