Пакет Windows - объединить несколько текстовых файлов в один.Имена текстовых файлов хранятся в списке - PullRequest
0 голосов
/ 21 июня 2019

Я новичок в пакете Windows - я хочу объединить несколько текстовых файлов в один, используя пакет Windows.Объединяемые файлы указываются в списке и могут быть динамическими.У меня есть один каталог файлов a.txt, b.txt, c.txt .... z.txt.Мне нужно объединить их подмножество в merged.txt. Например, если list является входным списком

set list = afz

Тогда я хочу, чтобы merged.txt содержал a.text, f.txt и z.txt.Я уже попробовал следующие идеи:

1) type * .txt> merged.txt: - не подойдет мне, так как это объединит все текстовые файлы.

2) скопируйте a.txt + f.txt + z.txt merged.txt: -Но это будет объединять только для этого одного входа.

У кого-нибудь есть идеи?

Ответы [ 2 ]

1 голос
/ 22 июня 2019

Команда for предназначена для обработки списков:

set "list=a f z"
for %%a in (%list%) do type %%a.txt >>merged.txt

Примечание: %%a - синтаксис пакетного файла. Если вы хотите использовать его непосредственно в командной строке, используйте %a.

Следующее выполняется быстрее (потому что он открывает целевой файл только один раз), но вы не заметите этого, если в списке всего несколько записей (при огромном списке это может быть в несколько сотен раз быстрее):

(for %%a in (%list%) do type %%a.txt)>merged.txt
1 голос
/ 22 июня 2019

Не знаю, как вы хотите вызвать свой пакетный файл, чтобы он был в воздухе.

Но я думаю, что вы были близки с объединенной копией a.txt + f.txt + z.txt.txt

Просто создайте этот список динамически, используя аргументы командной строки (у вас может быть до 9)

@echo off
set copyfiles=

for /d %%i in (%*) do call :process %%i
goto :output

:process
if "%copyfiles%" NEQ "" (
  set copyfiles=%copyfiles%+%1.txt
)
if "%copyfiles%" EQU "" (
  set copyfiles=%1.txt
)
goto :end

:output
copy %copyfiles% merge.txt

:end

Это тогда будет выполнено с

merge-them.cmd a b c f

Или выможет установить переменную наподобие

mylist=a,b,c,f

Тогда ваш цикл FOR будет ссылаться на% mylist% вместо% *

...