Windowsbatch file执行错误

我想运行一个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