Der Hintergrund: Ich verwende IFTTT, um DC Metro-Bulletins aus ihrem RSS-Feed in eine Textdatei für mein BBS zu ziehen. Das größte Problem ist, dass IFTTT Dateien nicht überschreiben oder anhängen kann, sodass ich mehrere Kopien von Dateien im Verzeichnis erhalte:
red.txt
red (1).txt
red (2).txt
und so weiter. Ich lasse die ursprüngliche (Nicht- )Version der Datei als Platzhalter stehen und konzentriere mich im Laufe des Tages darauf, die anderen Dateien zusammenzuführen. Für einen Satz von Dateien funktioniert das:(x).txt
if exist "red (1).txt" for %%f in ("red (*.txt") do type "%%f" >> red_line.txt & del "%%f"
Da es mehrere Dateisätze gibt (jeder mit einer anderen Farbe oder Farbkombination), versuche ich, ein übergeordnetes Element for
/ do
eine Schleife zu erstellen, um die verschiedenen U-Bahn-Linien zu durchlaufen (um die Wartung des Codes zu vereinfachen). Ich könnte immer einfach für jede der U-Bahn-Linien eine neue Instanz des oben genannten hinzufügen.
Ich denke, die Klammern in den Dateinamen stören die Klammern in der Schleife, weil sie sofort abbricht. Es muss eine Möglichkeit geben, die Klammern zu umgehen, aber ich habe Schrägstriche und Zirkumflexe usw. ausprobiert; nichts scheint zu funktionieren. Ich hoffe, es gibt eine bessere Möglichkeit, dies zu tun.
Dies ist die Basis des Codes, ohne die unzähligen Dinge, die ich bereits ausprobiert habe:
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"
)
Dies ist ein Beispiel dessen, was ich bekomme:
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" )
Dies ist der Teil des Ergebnisses, den ich sehe und der kaputt ist:
do type "%B" 1>>
Diese "1" muss doch von der (1) stammen, oder?
Außerdem stelle ich fest, dass meine Leerzeichen nicht in die Ergebnisse übernommen werden:
do type "%B" 1>>orange_line.txt
Antwort1
Ich würde das eher in PowerShell als in CMD machen. In PowerShell erstellen Sie eine äußere Schleife für alle Ordner, holen die Dateien aus jedem Ordner als Array von Dateiobjekten und dann sind Ihnen die Namen egal.
In einer neuen Datei zusammenführen und die verarbeiteten Dateien löschen – oder in ein Archiv verschieben, wenn Sie sie möglicherweise noch einmal benötigen.