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

3

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

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

e assim por diante. Estou deixando a versão original (não (x).txt ) 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:

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

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

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 eu tentei barras e carets, etc; nada parece funcionar. Eu espero que haja uma maneira melhor de fazer isso.

Esta é a base do código, sem a miríade de coisas que já experimentei:

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 parte do resultado que estou vendo é borked:

 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
    
por user284298 28.10.2014 / 16:22

1 resposta

0

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 preocupe com os nomes.

Junte-se a um novo arquivo e exclua os arquivos processados - ou mova-os para um arquivo, se desejar, novamente.

    
por 29.10.2014 / 00:41