我想运行一个batch file来连接所有CSV文件与模式ContractEligibility_*
在工作文件夹中。他们都是相同的格式,我需要连接而不重复标题。
代码如下:
@echo off>Combined.csv cls setlocal enabledelayedexpansion if exist C:\Users\kartikeya.avasthi\Desktop\Batch_Scripts\Combined.csv del C:\Users\kartikeya.avasthi\Desktop\Batch_Scripts\Combined.csv dir /ad /b C:\Users\kartikeya.avasthi\Desktop\Batch_Scripts\ContractEligibility_*.csv>C:\Users\kartikeya.avasthi\Desktop\Batch_Scripts\dirfiles.txt cd C:\Users\kartikeya.avasthi\Desktop\Batch_Scripts\ for /f "tokens=*" %%A in (C:\Users\kartikeya.avasthi\Desktop\Batch_Scripts\dirfiles.txt) do ( set /p header=<%%A echo !header!>Combined.csv ) for /f "tokens=*" %%A in (C:\Users\kartikeya.avasthi\Desktop\Batch_Scripts\dirfiles.txt) do ( more +1 %%A>>Combined.csv ) del dirfiles.txt
它连接好,但我得到一个“回声closures”作为第一行的文件的开始。 我知道第一个for循环(粗体的那个)是负责的,因为它在variables头中传递了空值。 所有的文件都在设定的path。 有人可以帮我解决这个问题吗? 在回声不可接受之后放置一个滴,因为batch file之后是一个使用创build的文件combined.csv
的自动加载。
下面的等效代码解决了这个问题,运行速度更快,看起来更干净。
@echo off setlocal enabledelayedexpansion cls cd C:\Users\kartikeya.avasthi\Desktop\Batch_Scripts\ set "header=" (for %%A in (ContractEligibility_*.csv) do ( if not defined header ( set /p header=<%%A echo !header! ) more +1 %%A )) > Combined.csv
快速和肮脏,只要删除该行。 在脚本的末尾添加这样的命令。
findstr / v“回声关闭”Combined.csv> Combined2.csv
del Combined.csv
@echo off break>Combined.csv cls setlocal enabledelayedexpansion if exist C:\Users\kartikeya.avasthi\Desktop\Batch_Scripts\Combined.csv del C:\Users\kartikeya.avasthi\Desktop\Batch_Scripts\Combined.csv dir /ad /b C:\Users\kartikeya.avasthi\Desktop\Batch_Scripts\ContractEligibility_*.csv>C:\Users\kartikeya.avasthi\Desktop\Batch_Scripts\dirfiles.txt cd C:\Users\kartikeya.avasthi\Desktop\Batch_Scripts\ for /f "tokens=*" %%A in (C:\Users\kartikeya.avasthi\Desktop\Batch_Scripts\dirfiles.txt) do ( set /p header=<%%A if "!header!" neq "" ( (echo(!header!)>Combined.csv goto :break_for ) ) :break_for for /f "tokens=*" %%A in (C:\Users\kartikeya.avasthi\Desktop\Batch_Scripts\dirfiles.txt) do ( more +1 %%A>>Combined.csv ) del dirfiles.txt
这将发生!header!
是一个空行,并没有传递给echo
命令的参数。你可以用(echo(!header!)>Combined.csv
解决这个问题。不要担心不平衡的括号 – 它不会破坏脚本。
更改
echo !header!>Combined.csv
至
echo(!header!>Combined.csv
如果你可以在文件开始处理一个换行符
或者
if defined header echo !header!>Combined.csv