Пакетный файл: объединение текстовых файлов с одинаковыми именами из текстового файла - PullRequest
0 голосов
/ 31 мая 2018

Я создал список путей к конкретным текстовым файлам, используя

dir /b /s "xinfo.txt" > index.txt

Все эти текстовые файлы являются файлами CSV, и я хотел бы объединить / добавить их все вместе, чтобы создать новыйтекстовый файл с именем "sourcing_directory".

Я пробовал метод, упомянутый в http://www.sidesofmarch.com/index.php/archive/2004/03/30/using-the-for-command-to-copy-files-listed-in-a-text-file/, который использует:

for /f "delims=" %%i in (filelist.txt) do echo D|xcopy "\\server\share\folder\%%i" "c:\temp\%%i" /i /z /y

Чтобы скопировать все текстовые файлы в одну папку, чтобы я мог просто использовать Копировать, чтобы объединить всеиз них.Однако это, похоже, не работает ни из-за структуры index.txt, ни из-за того, что все файлы имеют одинаковые имена.

1 Ответ

0 голосов
/ 01 июня 2018

Чтобы объединить несколько файлов, вы можете сделать это:

rem // Prepare empty file:
> "merged.csv" rem/
rem // Merge the files:
for /F "delims=" %%F in ('dir /S /B "xinfo.txt"') do (
    copy /Y "merged.csv"+"%%F" "merged.csv" /B
)

Это не проверяет содержимое файла никакими средствами, поэтому для ваших входных данных CSV каждый входной файл заканчивается разрывом строкичтобы получить действительный выходной файл CSV.

Если это не может быть гарантировано, вам нужно прочитать каждый файл по for /F, который игнорирует пустые строки, а также читает последнюю строку, даже если не завершается строкой-break:

rem // Write to output file:
> "merged.csv" (
    for /F "delims=" %%F in ('dir /S /B "xinfo.txt"') do (
        rem // Read input files line by line:
        for /F usebackq^ delims^=^ eol^= %%L in ("%%F") do echo(%%L
    )
)

Чтобы использовать файл заголовка, попробуйте это:

rem // Copy header file:
copy /Y "header.csv" "merged.csv"
rem // Merge the files:
for /F "delims=" %%F in ('dir /S /B "xinfo.txt"') do (
    copy /Y "merged.csv"+"%%F" "merged.csv" /B
)

Или это:

rem // Copy header file:
copy /Y "header.csv" "merged.csv"
rem // Append to output file:
>> "merged.csv" (
    for /F "delims=" %%F in ('dir /S /B "xinfo.txt"') do (
        rem // Read input files line by line:
        for /F usebackq^ delims^=^ eol^= %%L in ("%%F") do echo(%%L
    )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...