Не совсем понятно, что вы хотите. Поэтому позвольте мне добавить некоторую информацию о том, что я понял.
Есть некоторые CSV файлы в каталоге, как C:\Temp
, который является текущий каталог на выполнение пакетного файла, который содержит, например:
C: \ Temp \ DataFile1.csv
first name,second name,address,country
John,Doe,"20 Baker Street, Nowhere",Fantasy Island
x,y,anywhere,anyland
C: \ Temp \ DataFile2.csv
first name,second name,address,country
Jane,Doe,"5 Hammer Lane, Somewhere",Happy Island
x,y,anywhere,anyland
И в том же каталоге еще один CSV файл с именем ExtractionResults.csv
должен быть создан, содержащим в конце концов для этого примера:
"C:\Temp\DataFile1.csv",John,Doe,"20 Baker Street, Nowhere",Fantasy Island
"C:\Temp\DataFile2.csv",Jane,Doe,"2 Hammer Lane, Somewhere",Happy Island
имен файлов в первом столбце должен быть указан в случае одного из файлов CSV имеет запятую в файле имя.
Для такой задачи следующий комментарий пакетный файл может быть использован:
@echo off
rem Name of results file without file extension with or without path.
set "ResultsFileName=ExtractionResults"
rem Delete a perhaps already existing results file from a previous run.
del "%ResultsFileName%.csv" 2>nul
rem Delete also a perhaps already existing temporary results file from
rem a not completed previous run. A temporary file with a file extension
rem different to CSV is used for the results in case of results file is
rem created also in current directory with file extension CSV. This must
rem be done to avoid that the second line of the results file is included
rem in the results, too.
del "%ResultsFileName%.tmp" 2>nul
rem Call for each CSV file in current directory the subroutine
rem GetSecondLine with full name of the CSV file.
for %%I in (*.csv) do call :GetSecondLine "%%~fI"
rem Use command MOVE instead of RENAME to rename the file in case of results
rem file name is specified at top with an absolute or relative path as the
rem command RENAME does not allow as second parameter a file name with path.
move /Y "%ResultsFileName%.tmp" "%ResultsFileName%.csv"
rem Exit this batch file and return to parent batch file or command processor.
goto :EOF
rem This is a subroutine. It prints to the temporary results file
rem just the second line or nothing if the file contains just 1 line.
rem The execution of goto :EOF results here in exiting the subroutine.
:GetSecondLine
for /F "usebackq skip=1 delims=" %%L in ("%~1") do (
echo "%~1",%%L>>"%ResultsFileName%.tmp"
goto :EOF
)
goto :EOF
Ну, приведенный выше код содержит больше строк комментариев, чем команды. Но для лучшего понимания используемых команд и того, как они работают, откройте окно командной строки, выполните там следующие команды и тщательно прочитайте все страницы справки, отображаемые для каждой команды.
call /?
del /?
for /?
goto /?
move /?
rem /?
И читайте также статью Microsoft Using command redirection operators для пояснения >>
и 2>nul
.
переменная-Синтаксис вашего второго 'for' неверна ('% i% 'вместо' %% i') Также вставьте пробел между 'do' и' ('. Кроме того: good« Patchwork », но код Mofi более эффективен - особенно с большими файлами csv. – Stephan