Arquivos em lote para combinar vários arquivos (que possuem parênteses em seus nomes)

Arquivos em lote para combinar vários arquivos (que possuem parênteses em seus nomes)

Contexto: estou usando o IFTTT para extrair boletins do DC Metro de seu feed RSS para um arquivo de texto para meu BBS. O maior problema é que o IFTTT não pode sobrescrever ou anexar arquivos, então recebo várias cópias de arquivos no diretório:

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

e assim por diante. Estou deixando a versão original (não) do arquivo como espaço reservado e me concentrando em mesclar os outros arquivos ao longo do dia. Para um conjunto de arquivos isso funciona:(x).txt

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

Como existem vários conjuntos de arquivos (cada um com uma cor ou combinação de cores diferente), estou tentando criar um pai for/ doloop para percorrer as diferentes linhas do Metro (para facilitar a manutenção do código). Eu poderia sempre adicionar uma nova instância acima para cada uma das linhas do metrô.

Acho que os parênteses nos nomes dos arquivos estão interferindo nos parênteses do loop, porque ele quebra imediatamente. Deve haver uma maneira de escapar dos parênteses, mas tentei barras e sinais de intercalação, etc.; nada parece funcionar. Espero que haja uma maneira melhor de fazer isso.

Esta é a base do código, sem a infinidade de coisas que já tentei:

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"
)

Este é um exemplo do que recebo:

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" )

Esta é a parte do resultado que estou vendo:

 do type "%B" 1>>

Esse “1” deve ser do (1), certo?

Também noto que meus espaços não são transferidos para os resultados:

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

Responder1

Eu faria isso no PowerShell em vez de no CMD. No PowerShell, crie um loop externo para todas as pastas, obtenha os arquivos de cada pasta como uma matriz de objetos de arquivo e não se importe com os nomes.

Mescle em um novo arquivo e exclua os arquivos processados ​​- ou mova-os para um arquivo se desejar usá-los novamente.

informação relacionada