Windows批处理文件执行错误
我正在尝试运行一个批处理文件,以将所有csv文件与工作文件夹中的模式Windows批处理文件执行错误,windows,batch-file,Windows,Batch File,我正在尝试运行一个批处理文件,以将所有csv文件与工作文件夹中的模式contractQualifiety.*连接起来。它们的格式都相同,我需要连接,而不需要重复标题 代码如下: @echo off>Combined.csv cls setlocal enabledelayedexpansion if exist C:\Users\kartikeya.avasthi\Desktop\Batch_Scripts\Combined.csv del C:\Users\kartikeya.avas
contractQualifiety.*
连接起来。它们的格式都相同,我需要连接,而不需要重复标题
代码如下:
@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 off>Combined.csv
cls
延迟扩展
如果存在C:\Users\kartikeya.avasthi\Desktop\Batch\u Scripts\Combined.csv del C:\Users\kartikeya.avasthi\Desktop\Batch\u Scripts\Combined.csv
目录/a-d/b C:\Users\kartikeya.avasthi\Desktop\Batch\u Scripts\contractification\u*.csv>C:\Users\kartikeya.avasthi\Desktop\Batch\u Scripts\dirfiles.txt
cd C:\Users\kartikeya.avasthi\Desktop\Batch\u脚本\
对于(C:\Users\kartikeya.avasthi\Desktop\Batch\u Scripts\dirfiles.txt)中的/f“tokens=*”%%A(
设置/p标题=Combined.csv
)
对于(C:\Users\kartikeya.avasthi\Desktop\Batch\u Scripts\dirfiles.txt)中的/f“tokens=*”%%A(
更多+1%%A>>合并的.csv
)
del dirfiles.txt
它连接得很好,但我在文件开头的第一行得到一个“Echo is off”。
我知道第一个for循环(粗体)负责传递变量头中的null值。所有文件都在设置的路径中。
有人能帮我解决这个问题吗。在回显后放置拖放是不可接受的,因为批处理文件之后会自动加载,该加载使用创建的文件
combined.csv
快速且脏,只需删除该行即可。在脚本末尾添加类似这样的命令
findstr/v“回声关闭”Combined.csv>Combined 2.csv
del Combined.csv
@echo关闭
break>Combined.csv
cls
延迟扩展
如果存在C:\Users\kartikeya.avasthi\Desktop\Batch\u Scripts\Combined.csv del C:\Users\kartikeya.avasthi\Desktop\Batch\u Scripts\Combined.csv
目录/a-d/b C:\Users\kartikeya.avasthi\Desktop\Batch\u Scripts\contractification\u*.csv>C:\Users\kartikeya.avasthi\Desktop\Batch\u Scripts\dirfiles.txt
cd C:\Users\kartikeya.avasthi\Desktop\Batch\u脚本\
对于(C:\Users\kartikeya.avasthi\Desktop\Batch\u Scripts\dirfiles.txt)中的/f“tokens=*”%%A(
设置/p标题=Combined.csv
后藤:休息一会儿
)
)
:休息一会儿
对于(C:\Users\kartikeya.avasthi\Desktop\Batch\u Scripts\dirfiles.txt)中的/f“tokens=*”%%A(
更多+1%%A>>合并的.csv
)
del dirfiles.txt
当<代码>!头球是一个空行,没有传递给echo
命令的参数。您可以使用(echo(!header!)>组合的.csv来解决这个问题。不要担心括号不平衡-它不会破坏脚本。更改
echo !header!>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
@echo关闭
延迟扩展
cls
cd C:\Users\kartikeya.avasthi\Desktop\Batch\u脚本\
设置“头=”
(对于%%A in(ContractQualification.*.csv)do(
如果未定义标题(
设置/p标题=Combined.csv
我确实想到了这一点,谢谢你。但是我试图理解为什么没有分配头变量。但是你的方法是有效的。它确实删除了头变量,但它在第一行添加了括号,这是在删除(“.”)时提到的。当自动代码运行以在加载后使用该文件时,加载失败,因为它无法处理括号。我试图找到Set/p header=@npocmaka的原因似乎还有另一个问题。代码无法从第二个文件中删除头,因此创建的文件Combined.csv是头记录file1 header recordsfile2{[行:标题],,,,,,,,ContractNum,ProgramNum,CustomerNum,TierNum,StartDate,EndDate,DateCreated,Created更新日期:000321162123839947PRMI,32014-05-022017-09-30,管理员,管理员,2016-02-29 10:46:142016-02-29 10:46:14[行:标题],,,,,,,,ContractNum,ProgramNum,CustomerNum,TierNum,StartDate,EndDate,DateCreated,CreatedBy,DateUpdated,UpdatedBy}在您执行此操作的循环中set/p header=yes,我在所有文件列表中都有repating头。因此,任何文件的第一行工作都只是一个提示或建议。在调试和测试脚本直到最终完成之前,我将删除所有@echo off
和相关语句。一旦您获得最终代码,请添加de>@echo off
。此代码仍在添加第一个文件结束而第二个文件开始的所有文件的标题,即000321162123839947PRMI,32014-05-022017-09-30,管理员,管理员,2016-02-29 10:46:142016-02-29 10:46:14[行:标题],,,,,,,,,,,,,ContractNum,ProgramNum,CustomerNum,TierNum,StartDate,EndDate,DateCreated,CreatedBy,DateUpdated,Updated By此代码执行与发布的代码相同的任务…如果您发布一小部分文件(例如,3个文件中的5行),则可能我们都可以用相同的数据来测试它,并且有一个共同的基础来识别任何错误。否则,当我看不到它时,描述你在你的计算机中得到什么是毫无意义的…请编辑问题,不要在评论中发布额外的数据!
echo(!header!>Combined.csv
if defined header echo !header!>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