我正在尝试运行一个批处理文件来连接所有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
的自动加载。
答案 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