Windows bat / cmd脚本以递归方式搜索并在同一文件夹中的两个文本文件之间追加

时间:2018-10-13 15:57:22

标签: windows search text append

对某些人来说,这应该很容易,但是我是一个脚本初学者,所以对我来说,这很复杂。

我正在尝试创建一个Windows批处理脚本:

  • 递归扫描给定文件夹中的视频文件(mkv,mp4,avi等)
  • 提取其宽度和高度(使用ffprobe)
  • 将该信息插入正确位置的与视频相同文件夹中的现有“!.tags”文件中

到目前为止,我已经设法创建了一个批处理脚本:

  • 递归扫描给定文件夹中的视频文件(mkv,mp4,avi)
  • 提取其宽度和高度(使用ffprobe)
  • 将该信息写入与视频文件位于同一文件夹中的一堆“ index.txt”文件

这是当前脚本:

CALL :treeProcess
GOTO :eof

:treeProcess
FOR %%F IN (*.mkv, *.mp4, *.avi, *.wmv, *.mpg, *.ts) DO (
    ECHO "@" : "%%F", >> index.txt
    "C:\Program Files\FFmpeg\bin\ffprobe.exe" "%%F" -v error -of flat=s=_ -select_streams v:0 -show_entries stream=width -print_format xml >> index.txt
    "C:\Program Files\FFmpeg\bin\ffprobe.exe" "%%F" -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height -print_format xml >> index.txt
)
FOR /D %%d IN (*) DO (
    CD %%d
    CALL :treeProcess
    CD ..
)

EXIT /b

然后,我只使用Ecobyte的“替换文本”来消除脚本生成的无用的东西,最后得到干净的“ index.txt”文件。

这是干净的“ index.txt”文件之一。该文件夹中的3行条目与视频文件一样多(在此示例中,该文件夹中有4个视频文件):

"@" : "Creating Nerve.mkv",
        "WIDTH" : "1920",
        "HEIGHT" : "1080",
"@" : "Player Profiles.mkv",
        "WIDTH" : "1920",
        "HEIGHT" : "1080",
"@" : "The Fat Jewish Gets Tattewish - Outtakes.mkv",
        "WIDTH" : "1920",
        "HEIGHT" : "1080",
"@" : "The Governor's Ball Takeover.mkv",
        "WIDTH" : "1920",
        "HEIGHT" : "1080",

您明白了。

现在我需要的是另一个脚本:

  • 为每个以““ @””开头的行(第1、4、7、10、13、16等行)解析每个“ index.txt”文件
  • 在同一文件夹中,解析“!.tags”文件以获取完全相同的文本
  • 在“!.tags”文件中找到的文本之后立即添加“ index.txt”文件的下两行(当然,当然还有初始CRLF)

示例:

  • 解析第1行的“ index.txt”:“ @”:“正在创建Nerve.mkv”,
  • 解析以下相关的“!.tags”文件:“ @”:“正在创建Nerve.mkv”,
  • 在“!.tags”文件中找到的文本之后,将“ index.txt”文件的这两行追加:   “ WIDTH”:“ 1920”,   “ HEIGHT”:“ 1080”,
  • 继续解析

以下是“!.tags”文件开头的样子:

[
   {
      "@" : "Creating Nerve.mkv",
      "CREATION_TIME" : "2016-10-16T15:51:50.000000Z",
      "DATE" : "2016",
      "DURATION" : "1606.3550000",
      "ENCODER" : "libebml v1.3.3 + libmatroska v1.4.4",
      "GENRE" : "Featurettes",
      "TITLE" : "Creating Nerve",
   },
   {
      "@" : "Player Profiles.mkv",
      "CREATION_TIME" : "2016-10-16T16:03:56.000000Z",
      "DURATION" : "347.6030000",
      "TITLE" : "Player Profiles"
   },
   {
      "@" : "The Fat Jewish Gets Tattewish - Outtakes.mkv",
      "CREATION_TIME" : "2016-10-16T16:11:23.000000Z",
      "DURATION" : "168.1040000",
      "TITLE" : "The Fat Jewish Gets Tattewish - Outtakes"
   },
   {
      "@" : "The Governor's Ball Takeover.mkv",
      "CREATION_TIME" : "2016-10-16T16:24:23.000000Z",
      "DURATION" : "165.4590000",
      "TITLE" : "The Governor's Ball Takeover"
   }
]

这是它的最终外观:

[
   {
      "@" : "Creating Nerve.mkv",
      "WIDTH" : "1920",
      "HEIGHT" : "1080",
      "CREATION_TIME" : "2016-10-16T15:51:50.000000Z",
      "DATE" : "2016",
      "DURATION" : "1606.3550000",
      "ENCODER" : "libebml v1.3.3 + libmatroska v1.4.4",
      "GENRE" : "Featurettes",
      "TITLE" : "Creating Nerve",
   },
   {
      "@" : "Player Profiles.mkv",
      "WIDTH" : "1920",
      "HEIGHT" : "1080",
      "CREATION_TIME" : "2016-10-16T16:03:56.000000Z",
      "DURATION" : "347.6030000",
      "TITLE" : "Player Profiles"
   },
   {
      "@" : "The Fat Jewish Gets Tattewish - Outtakes.mkv",
      "WIDTH" : "1920",
      "HEIGHT" : "1080",
      "CREATION_TIME" : "2016-10-16T16:11:23.000000Z",
      "DURATION" : "168.1040000",
      "TITLE" : "The Fat Jewish Gets Tattewish - Outtakes"
   },
   {
      "@" : "The Governor's Ball Takeover.mkv",
      "WIDTH" : "1920",
      "HEIGHT" : "1080",
      "CREATION_TIME" : "2016-10-16T16:24:23.000000Z",
      "DURATION" : "165.4590000",
      "TITLE" : "The Governor's Ball Takeover"
   }
]

有人可以帮我吗?谢谢!

1 个答案:

答案 0 :(得分:0)

没关系。我找到了另一种解决方案。 我错误地认为这是一个帮助委员会。谢谢你。