将 'for' 循环的相同输出定向到两个文件?

Directing same output from a 'for' loop to two files?

任务:使用变量 %folder%%wildcards% 搜索驱动器。 path-to-file|filesize 将找到的文件与 database.txt 中的条目进行比较。如果找到匹配项,则将其复制到 workinglist.txt,否则将创建一个新条目。重点是使用 mediainfo 提供的存储 %duration% 数据来大大减少处理时间。

for /r "%folder%" %%a in (%wildcards%) do (
    findstr /i /c:"%%a|%%~za" "%appdata%\df\database.txt" >>%appdata%\df\workinglist.txt || mediainfo --output="General;%%CompleteName%%|%%FileSize%%|%%Duration%%" "%%a" >>%appdata%\df\workinglist.txt
)

问题是 database.txt 应该包含所有可能的数据,而不仅仅是 %folder%%wildcards% 指定的数据,这意味着任何新条目都需要添加到workinglist.txtdatabase.txt 文件。

  1. 如何将 mediainfo 中的数据同时添加到 workinglist.txtdatabase.txt 而无需另一个(缓慢的)mediainfo 查询?

  2. 如何将这一长行代码拆分为另一行或几行代码以使其更易于阅读和管理?

有几种不同的方法可以解决这个问题。此解决方案对每个新文件仅使用 mediainfo 查询一次:

rem Insert data of new files in newEntries.txt file
del newEntries.txt 2> NUL
for /r "%folder%" %%a in (%wildcards%) do (
    findstr /i /c:"%%a|%%~za" "%appdata%\df\database.txt" >> "%appdata%\df\workinglist.txt"
    if errorlevel 1 (
        mediainfo --output="General;%%CompleteName%%|%%FileSize%%|%%Duration%%" "%%a" >> newEntries.txt
    )
)

rem Add new entries to both database and workinglist
type newEntries.txt >> "%appdata%\df\database.txt"
type newEntries.txt >> "%appdata%\df\workinglist.txt"