複数のファイル(名前に括弧が含まれる)を結合するバッチ ファイル

複数のファイル(名前に括弧が含まれる)を結合するバッチ ファイル

背景: 私は IFTTT を使用して DC Metro の速報を RSS フィードからテキスト ファイルに取得し、BBS に使用しています。最大の問題は、IFTTT ではファイルを上書きしたり追加したりできないため、ディレクトリ内にファイルのコピーが複数作成されることです。

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

などなど。私はファイルのオリジナル(非)バージョンをプレースホルダーとして残し、一日を通して他のファイルのマージに集中します。1セットのファイルの場合、これは機能します。(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

私はこれを CMD ではなく PowerShell で実行します。PowerShell では、すべてのフォルダーに対して外部ループを作成し、各フォルダーからファイルをファイル オブジェクトの配列として取得します。その後は、名前を気にする必要はありません。

新しいファイルに結合し、処理済みのファイルを削除します。または、再度必要になる可能性がある場合はアーカイブに移動します。

関連情報