[CMD] Слияние нескольких текстовых файлов в один

monowar

Активный пользователь
Сообщения
390
Реакции
620
Есть несколько текстовых файлов - нужно перенести их содержимое (текст) в один файл.
Есть батник
CMD/BATCH:
@Echo Off
@chcp 1251
for %%i in ("*.txt") do >>"%%i" echo:
copy /a "*.txt" "some.tmp" && ren "some.tmp" "some.txt"
exit

Но он даёт такой результат
sshot-3.jpg

А надо такой
sshot-4.jpg

или

sshot-5.jpg

Можно-ли батник доработать ?
 

Dragokas

Angry & Scary Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,727
Реакции
6,209
Пример файлов дайте (в виде прикрепленного файла).

И в какой кодировке нужно на выходе получить?
 
Последнее редактирование:

monowar

Активный пользователь
Сообщения
390
Реакции
620
@Dragokas, если я правильно тебя понял , то с этими файлами работал батник

А кодировку можно ASHI или UTF-8
 

Вложения

  • 3.txt
    9 байт · Просмотры: 2
  • 2.txt
    32 байт · Просмотры: 2
  • 1.txt
    32 байт · Просмотры: 4

Dragokas

Angry & Scary Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,727
Реакции
6,209
Технически твой батник выполняет все, как описано - соединяет содержимое.
Ты хочешь удалить пустые строчки, как я понимаю?
Каков примерный объём (в кол-ве строк) реальных данных?
 

Dragokas

Angry & Scary Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,727
Реакции
6,209
Вообщем-то такой алгоритм должен быть быстрым:

Код:
@echo off
Setlocal EnableExtensions
md result 2>NUL
set res=result\result.txt
del "%res%" 2>NUL
for %%i in ("*.txt") do (
  < %%i findstr /VR "^$" >> "%res%"
  echo --------------->> "%res%"
)
pause
Результат в подпапке result.
 

monowar

Активный пользователь
Сообщения
390
Реакции
620
Ты хочешь удалить пустые строчки, как я понимаю?
Да именно это я и хочу , а объём - разный (дурная привычка создавать много текстовых файлов)

Батник работает (соединяет без пустых строк) ,но соединяет всего два файла, запускаю в папке с файлами

Ещё есть батник ,но он только для двух файлов ,попробовал его - два раза соединил без пустых строк , а потом начал соединять с пустыми строками.
CMD/BATCH:
@Echo Off
@chcp 1251
(
    type 1.txt
    echo:
    type 2.txt
)>final.txt
exit
Может ОСь начала голову кружить?
 

Dragokas

Angry & Scary Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,727
Реакции
6,209
Батник работает (соединяет без пустых строк) ,но соединяет всего два файла, запускаю в папке с файлами
ты про батник на основе findstr?
А он точно доработал до конца (и не завис)?
 

Dragokas

Angry & Scary Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,727
Реакции
6,209
Понятно, значит Microsoft так и не починила эту утилиту.

Можете попробовать построчный разбор, но это медленно:
Код:
@echo off
Setlocal EnableExtensions
md result 2>NUL
set res=result\result.txt
del "%res%" 2>NUL
for %%i in ("*.txt") do (
  for /f "usebackq delims=" %%a in ("%%~i") do echo >> "%res%" %%a
  echo --------------->> "%res%"
)
pause
Если данных очень много, нужно писать на другом ЯП.
 

monowar

Активный пользователь
Сообщения
390
Реакции
620
@Dragokas, Спасибо! Нет не медленно, 5 файлов по 5-8 Kb моментально. Вот этот параметр "usebackq delims=" убирает пустые строчки? Я пытался вставить " delims=" ,но у меня ничего не получалось :Dntknw: и 2>NUL -что это даёт (вкратце)
 
Последнее редактирование:

fils

Пользователь
Сообщения
16
Реакции
3
А чем Вас не устраивает батник в одну строчку[:
Код:
copy ABC abc.txt

В папке ABC должны находятся все txt файлы (например, a.txt, b.txt, c.txt), тексты которых надо объединить в abc.txt файле. Батник, в данном случае, должен находиться рядом с папкой. Если же прописать полный адрес папки, тогда где угодно.
 

Вложения

  • a.txt
    30 байт · Просмотры: 0
  • b.txt
    30 байт · Просмотры: 0
  • c.txt
    30 байт · Просмотры: 0
  • abc.txt
    91 байт · Просмотры: 1
Последнее редактирование модератором:

fils

Пользователь
Сообщения
16
Реакции
3
С раделительной чертой:
Код:
for /r ABC %%a in (*) do (
type %%a>>abc.txt
echo.---------------------------->>abc.txt
)
 
Последнее редактирование модератором:

fils

Пользователь
Сообщения
16
Реакции
3
Пустые строки можно убрать так:

CMD/BATCH:
for /r ABC %%a in (*) do for /f "usebackq delims=" %%b in (%%a) do echo.%%b>>abc.txt
 
Последнее редактирование модератором:

fils

Пользователь
Сообщения
16
Реакции
3
Без пустых строк и с чертой
CMD/BATCH:
for /r ABC %%a in (*) do (
for /f "usebackq delims=" %%b in (%%a) do (
echo.%%b>>abc.txt
)
echo.---------------------------->>abc.txt
)
так:
 

fils

Пользователь
Сообщения
16
Реакции
3
Можно и так (без пустых строк и черты):
CMD/BATCH:
copy ABC xyz.txt
for /f "usebackq delims=" %%a in (xyz.txt) do echo.%%a>>abc.txt
del /q xyz.txt
 
Последнее редактирование:

monowar

Активный пользователь
Сообщения
390
Реакции
620
@fils, Твой тоже вариант рабочий :Good:.
А ещё можно-ли этот батник доработать , чтобы вид был такой черта - название файла - черта (а дальше содержание файла до следующей черты) ?
 

fils

Пользователь
Сообщения
16
Реакции
3
Попробуй это.

CMD/BATCH:
for /r ABC %%a in (*) do (
echo.---------------------------->>abc.txt
echo.      %%~nxa>>abc.txt
echo.---------------------------->>abc.txt
for /f "usebackq delims=" %%b in ("%%~a") do (
echo.%%b >>abc.txt
)
)
 
Последнее редактирование:

fils

Пользователь
Сообщения
16
Реакции
3
@fils, Твой тоже вариант рабочий :Good:.
А ещё можно-ли этот батник доработать , чтобы вид был такой черта - название файла - черта (а дальше содержание файла до следующей черты) ?
CMD/BATCH:
for /r ABC %%a in (*) do (
echo.---------------------------->>abc.txt
echo.      %%~nxa>>abc.txt
echo.---------------------------->>abc.txt
for /f "usebackq delims=" %%b in ("%%~a") do (
echo.%%b >>abc.txt
)
)
 
Сверху Снизу