背景:我正在使用 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
循环来循环显示不同的地铁线路(以使代码更易于维护)。我总是可以为每条地铁线路添加上述内容的新实例。
我认为文件名中的括号干扰了循环中的括号,因为它会立即中断。一定有办法转义括号,但我试过斜杠和插入符号等;似乎都不起作用。我希望有更好的方法来做到这一点。
这是代码的基础,没有我已经尝试过的无数的东西:
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
我会在 PowerShell 而不是 CMD 中执行此操作。在 PowerShell 中为所有文件夹创建一个外循环,从每个文件夹中获取文件作为文件对象数组,然后您就不必关心名称了。
合并到一个新文件并删除已处理的文件 - 或者,如果您可能再次需要它们,则将它们移动到档案中。