3

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

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

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

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 ответ1

0

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

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

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