【问题标题】:Directing same output from a 'for' loop to two files?将来自“for”循环的相同输出定向到两个文件?
【发布时间】:2021-11-05 05:50:21
【问题描述】:

任务:使用变量%folder%%wildcards% 搜索驱动器。找到的文件由path-to-file|filesizedatabase.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.txt 和@ 987654333@文件。

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

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

【问题讨论】:

  • findstr ... >> workinglist || ( mediainfo ... >> workinglist & mediainfo ... >> database)怎么样
  • 一个 mediainfo 查询使脚本非常慢,执行两次会慢一倍。
  • findstr ... >> workinglist || for /f %%c in ('mediainfo ...') do ( echo %%c >> workinglist & echo %%c >> database ) ?避免执行 mediainfo 两次
  • @NahuelFouilleul 不确定如何设置附加 for 循环的选项以使其正确显示。想要将其格式化为答案?
  • 如果您显示几行 workinglist.txtdatabase.txt 会有所帮助。

标签: windows for-loop batch-file cmd mediainfo


【解决方案1】:

有几种不同的方法可以解决这个问题。此解决方案对每个新文件仅使用一次 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"

【讨论】:

  • 适用于大多数文件,但有时我会收到错误消息“该进程无法访问该文件,因为它正在被另一个进程使用。”,我认为这可能是由于文件名中的特殊字符。现在调查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 2017-06-19
  • 2010-12-13
  • 1970-01-01
  • 2014-07-29
  • 2019-06-28
  • 1970-01-01
相关资源
最近更新 更多