【发布时间】:2018-05-27 18:36:21
【问题描述】:
我根据在别处找到的一些示例制作了一个 Windows 批处理文件。 它的作用是解析特定文件类型 (.mkv) 的文件夹,然后从 MKVToolNix 文件夹运行 mkvmerge.exe。 该命令产生一个输出,列出容器中的不同轨道。
文件的核心是
set rootfolder="Z:\Movies"
for /r %rootfolder% %%a in (*.mkv) do (
for /f %%b in ('mkvmerge -i "%%a" ^| find /c /i "chapters"') do (
if [%%b]==[0] (
echo "%%a" has no chapters
) else (
echo Doing some interesting stuff!
)
)
)
上面的例子只是文件的一部分,rootfolder 设置为我要解析的文件夹,当然,当找到一个包含章节的文件时,它会运行额外的命令。 这一切都很好,但我也想同时检查字幕。 find 命令不使用正则表达式,或者我可以添加“章节字幕”。我使用其他命令(如 findstr)的努力并没有真正奏效。 如何在此处使用 RegEx?
这是一个示例输出,在 .mkv 文件上运行 mkvmerge.exe
mkvmerge.exe -i "Snow White and the Seven Dwarfs (1937) [tt0029583].mkv"
File 'Snow White and the Seven Dwarfs (1937) [tt0029583].mkv': container: Matroska
Track ID 0: video (MPEG-4p10/AVC/h.264)
Track ID 1: audio (DTS)
Track ID 2: audio (AC-3)
Track ID 3: subtitles (HDMV PGS)
Track ID 4: subtitles (HDMV PGS)
Chapters: 26 entries
这个例子有字幕和章节轨道,批处理文件会找到关键字“章节”(它被设置为忽略大小写)。即使没有章节,我也想捕获包含关键字“字幕”的文件。
为了澄清我的意图,我希望代码:
- 通过给定文件夹解析
- 对于所有 .mkv 文件,执行 mkvmerge /i 这将输出(作为文本)该文件中的流
- 查看该输出,如果它包含单词“章节”和/或“字幕”,则会触发一些操作。
【问题讨论】:
-
您应该提供要解析的示例输出。不是每个人都使用 mkvmerge。
-
谢谢,我将添加一个示例输出,尽管在撰写本文时我认为没有必要。这里的重点是扫描 2 个关键字中的任何一个,而不仅仅是一个。
-
您还应该分享您的(失败的)
findstr尝试... -
好点 aschipfl,但由于我不了解 for /f 循环的机制或输出格式,它们除了空变量或不正确的语法外从来没有任何意义。
标签: regex batch-file find