我正在尝试使用以下代码查看所有.csv文件的当前目录,并将它们连接成一个。
@echo off
ECHO Set working directory
cd /d %~dp0
ECHO Deleting existing combined file
echo '' > combined.csv
setlocal ENABLEDELAYEDEXPANSION
set cnt=1
for %%i in (*.csv) do (
if cnt==1 (
for /f "delims=/" %%j in ('type "%%i"') do echo %%j >> combined.csv
) else (
for /f "skip=1 delims=" %%j in ('type "%%i"') do echo %%j >> combined.csv
)
set /a cnt+=1
)
目前它将文件连接成一个,但似乎错过了标题行并将其替换为""。
有什么想法吗?
答案 0 :(得分:0)
您创建了一个文件" combined.csv"。这与*.csv
可能的解决方法:
将其命名为combined.txt
,因此for %%i in (*.csv)
无法识别它。完成后,将其重命名为combined.csv
。
顺便说一句:echo '' >file.txt
不会创建空文件。它将包含''
。
echo.>file.txt
将创建一个空行的文件。要创建一个真正的空文件,最短的代码是break>file.txt
答案 1 :(得分:0)
重要部分是(并且您不需要调用delayedexpansion
)
set cnt=1
for %%i in (*.csv) do (
if DEFINED cnt (
for /f "delims=/" %%j in ('type "%%i"') do echo %%j >> combined.csv
SET "cnt="
) else (
for /f "skip=1 delims=" %%j in ('type "%%i"') do echo %%j >> combined.csv
)
)
cnt
被滥用作为反击。 if cnt==1 (
永远不会为真 - cnt
永远不会等于1
。 cnt
的内容可能是1
,但在这种情况下,您需要if !cnt!==1 (
- !cnt!
检索cnt
的当前内容1}} - 但仅在调用delayedexpansion
的时候。
当某个值被用作标记时,我建议使用将变量设置为 nothing 或 anyvalueyoulike 然后使用{的策略{1}}访问“当前是否定义了此值?”然后将值切换为某些或 nothing 以更改行为。无论是否已调用if defined varname
,此方法都在循环内工作。