2015-05-22 2 views
1

Мне нужно проанализировать результаты, представленные в списке файлов CSV, где мне нужно иметь имя файла и его вторую строку, это для набора файлов каталога результатов в одном выходе. Я нашел в Stack Overflow фрагмент кода, чтобы получить имя файла и кусок кода, чтобы получить вторую строку файла. Честно говоря, я не знаю, как их спланировать.Как получить имя файла и вторую строку всех CSV-файлов в каталоге в другой файл CSV?

Это то, что я до сих пор:

setlocal enabledelayedexpansion 
@echo "filename secondline"  
for /f "delims=" %%a in ('dir /b /s *.*') do (@echo %%~nxa 
    set filename=%%~a 
    echo %filename% 
    pause 
    for /f "tokens=1,* delims=:" %i% in ('findstr /n /r . %filename%') do(if %i% geq 2 if %i% leq 2 echo %j%) 
    rem pause 
) 
endlocal 

Как получить имя файла и второй строки всех файлов CSV в каталоге на другой CSV файл?

+0

переменная-Синтаксис вашего второго 'for' неверна ('% i% 'вместо' %% i') Также вставьте пробел между 'do' и' ('. Кроме того: good« Patchwork », но код Mofi более эффективен - особенно с большими файлами csv. – Stephan

ответ

0

Не совсем понятно, что вы хотите. Поэтому позвольте мне добавить некоторую информацию о том, что я понял.

Есть некоторые 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.