Пакетные файлы для объединения нескольких файлов (имеющих скобки в своих именах)

Пакетные файлы для объединения нескольких файлов (имеющих скобки в своих именах)

Предыстория: Я использую IFTTT для извлечения бюллетеней DC Metro из их RSS-канала в текстовый файл для моей BBS. Самая большая проблема в том, что IFTTT не может перезаписывать или добавлять файлы, поэтому я получаю несколько копий файлов в каталоге:

red.txt
red (1).txt
red (2).txt

и так далее. Я оставляю исходную (не ) версию файла в качестве заполнителя и концентрируюсь на объединении других файлов в течение дня. Для одного набора файлов это работает:(x).txt

if exist "red (1).txt" for %%f in ("red (*.txt") do type "%%f" >> red_line.txt & del "%%f"

Поскольку существует несколько наборов файлов (каждый из которых имеет свой цвет или комбинацию цветов), я пытаюсь создать родительский for/ doцикл для циклического прохождения по разным линиям метро (чтобы упростить поддержку кода). Я всегда мог бы просто добавить новый экземпляр вышеприведенного для каждой из линий метро.

Я думаю, что скобки в именах файлов мешают скобкам в цикле, потому что он немедленно прерывается. Должен быть способ экранировать скобки, но я пробовал слеши, знаки вставки и т. д.; ничего не работает. Я надеюсь, что есть лучший способ сделать это.

Вот основа кода, без множества вещей, которые я уже пробовал:

FOR %%A IN (red green orange red_orange) DO  ( 
if exist "%%A (1).txt" for %%B in ("%%A (*.txt") do type "%%B" >> %%A_line.txt & del "%%B"
)

Вот пример того, что я получаю:

C:\sbbs\Dropbox\bbs\ifttt>(if exist "red (1).txt" for %B in ("red (*.txt") do type "%B" 1>>red_line.txt & del "%B" )

C:\sbbs\Dropbox\bbs\ifttt>(if exist "green (1).txt" for %B in ("green (*.txt") do type "%B" 1>>green_line.txt & del "%B" )

C:\sbbs\Dropbox\bbs\ifttt>(if exist "orange (1).txt" for %B in ("orange (*.txt") do type "%B" 1>>orange_line.txt & del "%B" )

C:\sbbs\Dropbox\bbs\ifttt>(if exist "yellow (1).txt" for %B in ("red_orange (*.txt") do type "%B" 1>>red_orange_line.txt & del "%B" )

Вот часть результата, которую я вижу, некорректна:

 do type "%B" 1>>

Эта «1» должна быть из (1), верно?

Я также заметил, что мои пробелы не переносятся в результаты:

do type "%B" 1>>orange_line.txt

решение1

Я бы сделал это в PowerShell, а не в CMD. В PowerShell создайте внешний цикл для всех папок, получите файлы из каждой папки как массив файловых объектов, и тогда вам не будут интересны имена.

Объедините в новый файл и удалите обработанные файлы или переместите их в архив, если они вам снова понадобятся.

Связанный контент