Предыстория: Я использую 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 создайте внешний цикл для всех папок, получите файлы из каждой папки как массив файловых объектов, и тогда вам не будут интересны имена.
Объедините в новый файл и удалите обработанные файлы или переместите их в архив, если они вам снова понадобятся.