Windows批处理文件执行错误

时间:2016-03-17 09:59:41

标签: windows 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 /a-d /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

它连接正常,但我在文件的开头作为第一行得到“Echo is off”。 我知道第一个for循环(粗体中的那个)是负责的,因为它在变量头中传递null值。所有文件都在设置路径中。 有人可以帮我解决问题。在回显之后放置一个drop是不可接受的,因为批处理文件后跟一个利用创建的文件combined.csv的自动加载。

4 个答案:

答案 0 :(得分:1)

下面的等效代码可以解决问题,运行得更快,看起来更干净......

@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

答案 1 :(得分:0)

快速又脏,只需删除该行即可。在脚本的末尾添加这样的命令。

  

findstr / v“Echo is off”Combined.csv&gt; Combined2.csv

     

del Combined.csv

答案 2 :(得分:0)

@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 /a-d /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解决此问题。不要担心括号不平衡 - 它不会破坏剧本。

答案 3 :(得分:0)

变化

echo !header!>Combined.csv

echo(!header!>Combined.csv

如果你可以在文件开头处理换行符

或到

if defined header echo !header!>Combined.csv