Объединение нескольких файлов в один файл с использованием cmd - PullRequest
0 голосов
/ 19 октября 2018

У меня есть несколько файлов, например, file-1.txt, file-2.txt, file-3.txt ...... и anotherfile-1.txt, anotherfile-2.txt, anotherfile-3.txt ...... и т. д. Мне нужно объединить каждую группу файлов в одну.Выходные данные должны быть похожи на file.txt (содержит текст из файла file-1.txt, file-2.txt, file-3.txt ..) и anotherfile.txt (содержит текст fromanotherfile-1.txt, anotherfile-2.txt, anotherfile-3.txt)

Что мне удалось сделать сейчас, так это просто получить весь текст в один файл.Код ниже

for /r C:\pdftxt\OCR\txt_tes %i in (*.txt) do type "%i" >> C:\pdftxt\OCR\folded\output.txt

Буду очень признателен за любую помощь

Ответы [ 3 ]

0 голосов
/ 19 октября 2018

Я бы, вероятно, решил вашу задачу с помощью следующего кода (см. Пояснительные замечания):

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem // Define constants here:
set "_SOURCE=C:\pdftxt\OCR\txt_tes"  & rem // (path to directory containing the source files)
set "_TARGET=C:\pdftxt\OCR\folded"   & rem // (path to directory containing the target files)
set "_EXT=.txt"                      & rem // (file name extension including the leading dot)
set "_SUB=#"                         & rem // (if not empty, search sub-directories of source too)
set "_TEMP=%TEMP%\%~n0_%RANDOM%.tmp" & rem // (temporary file to collect prefixes)

rem // Define option for `dir` command to regard sub-directories or not:
if defined _SUB (set "SUB=/S") else (set "SUB=")
rem // Create empty temporary file to append to later:
> "%_TEMP%" rem/
rem // Walk through directory (tree) and search for matching files:
for /F "delims= eol=|" %%F in ('dir /B %SUB% /A:-D "%_SOURCE%\*-*%_EXT%"') do (
    rem // Split file name at first hyphen (ignoring leading hyphens):
    for /F "delims=-" %%E in ("%%~nxF") do (
        rem /* Store file name part before first hyphen into temporary file,
        rem    avoiding duplicates (disregarding the case): */
        > nul findstr /X /I /C:"%%E" "%_TEMP%" || >> "%_TEMP%" echo(%%E
    )
)
rem // Change into the source (root) directory:
pushd "%_SOURCE%" && (
    rem // Walk through temporary file, which is a list of partial file names:
    for /F "usebackq delims= eol=|" %%L in ("%_TEMP%") do (
        rem // Create an empty target file to append to later:
        > nul copy /Y nul "%_TARGET%\%%L%_EXT%"
        rem /* Search for all files whose names begin with the currently
        rem    iterated partial file name plus a hyphen: */
        for /F "delims= eol=|" %%K in ('dir /B %SUB% /A:-D "%%L-*%_EXT%"') do (
            rem // Append content matching file to target file:
            > nul copy /Y "%_TARGET%\%%L%_EXT%"+"%%K" "%_TARGET%\%%L%_EXT%" /B
        )
    )
    rem // Restore previous directory:
    popd
)
rem // Clean up temporary file:
del "%_TEMP%"

endlocal
exit /B
0 голосов
/ 19 октября 2018

спасибо, ребята.Этот помог

for /r "C:\pdftxt\OCR\txt_tes" %%A in (*.txt) do @(for /f "delims=-" %%B in ("%%~nA") do >> "C:\pdftxt\OCR\folded\%%~B.txt" type "%%~A")
0 голосов
/ 19 октября 2018

Предполагая,

  • в имени файла есть только одна черта
  • конечные числа непрерывны 1..n

:: Q:\Test\2018\10\19\SO_52890092.cmd
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion

Set "Base=C:\pdftxt\OCR\txt_tes"
pushd "%Base%"

:: Get file names and largest trailing number
for /F "tokens=1-3 delims=-." %%A in (
  'Dir /B *-*.txt ^| findstr.exe /I ".*-[0-9]*.txt$" '
) do (
  if defined filename[%%~nA] (
    if !filename[%%~nA]! lss %%B  set filename[%%~nA]=%%B
  ) else set filename[%%~nA]=%%B
)
Echo found:
set filename[
Echo:
:: iterate filenames and then file numbers
For /f "tokens=2* delims=[]=" %%A in ('set filename[ 2^>Nul') do (
  Type nul > "%%A.txt"
  For /L %%L in (1,1,%%B) Do Type "%%A-%%L.txt" >> "%%A.txt"
  Rem Type "%%A.txt"
)
popd

Вывод с примерами файлов на мой диск A: \, содержащий только собственное имя файла.
(и без Rem перед типом)

> Q:\Test\2018\10\19\SO_52890092.cmd
found:
filename[anotherfile]=3
filename[file]=3

a:\anotherfile-1.txt
a:\anotherfile-2.txt
a:\anotherfile-3.txt
a:\file-1.txt
a:\file-2.txt
a:\file-3.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...