У меня есть следующие текстовые файлы:

apple1.txt
apple2.txt
apple3.txt

water melon10.txt
water melon11.txt
water melon12.txt

Я хотел бы объединить все яблоки в один текстовый файл - apple_all.txt а все арбузы - в другой - water melon_all.txt

Обратите внимание, что пространство в арбузе специально - в именах некоторых txt-файлов есть пробелы.

Все файлы находятся в одной папке. Порядок слияния не имеет значения.

1 ответ1

3

MERGE.BAT

@echo off
>"%~1_all.txt" (
  for %%F in ("%~1*.txt") do if /i "%%F" neq "%~1_all.txt" type "%%F"
)

Использование:

merge apple
merge "water melon"

Или, поместив все в один пакетный скрипт:

@echo off
call :merge apple
call :merge "water melon"
exit /b

:merge
>"%~1_all.txt" (
  for %%F in ("%~1*.txt") do if /i "%%F" neq "%~1_all.txt" type "%%F"
)
exit /b

Программно вычислить все фрукты в папке нетривиально, поскольку в пакете нет простого способа обрезать все конечные цифры из базового имени файла. Вот однажды решение (не проверено):

@echo off
setlocal disableDelayedExpansion
del *_all.txt 2>nul
for /f "delims=" %%F in (
  'dir /b /a-d *.txt^|findstr "[^0-9][0-9]*\.txt$"'
) do call :proc "%%F"
exit /b

:proc
set "file=%~1"
set "fruit=%~n1"
setlocal enableDelayedExpansion
:trimNum
if "!fruit:~-1!" geq "0" if !fruit:~-1!" leq "9" (
  set "fruit=!fruit:~0,-1!"
  goto :trimNum
)
type "!file!" >>"!fruit!_all.txt"
exit /b

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .