文件夹内的批处理文件创建 MediaInfo.nfo 文件

2023-12-30

我正在尝试创建一个批处理,其目的是使用 MediaInfo.exe (CLI) 创建一个包含文件夹中包含的视频文件的所有“mediainfo”的文本文件 (.nfo)。

批处理是从上下文菜单中执行的:右键单击包含视频文件的文件夹。 为此,该文件将被放置在“shell:sendto”中。

生成的包含所有媒体信息的 .nfo 文件必须“放置/保存或移动”到包含视频文件的文件夹中。

一个特殊之处是我需要更改最终的 .nfo 文件,以便删除“完整名称”行的所有路径部分:

Complete name                            : /Users/me/Downloads/Folder1/Folder2/RÉCENTS/[File] File Name - 185  (Encode Format 1080p).mkv

在此示例中:进行搜索并替换为仅留下:

Complete name                            : [File] File Name - 185  (Encode Format 1080p).mkv

目前,我已经成功创建了这批(链接如下)。 这个有一些错误,即:

  • 未找到文件 (x2)
  • 如果存在特殊字符,Powershell 会出现错误

总结一下批量搜索的过程:

1.右键单击包含文件的文件夹>发送到>单击批处理文件。

2.创建文件夹中包含的文件的所有媒体信息 txt 文件

3.通过在每个内容之间添加分隔符“----”来合并媒体信息 txt 文件。

4.使用正则表达式搜索并替换最终文件,以删除文件名之前的所有路径,然后将 (.nfo) 保存在文件夹内。

5.清理步骤 2 中的旧临时文件。

我设法创建的实际批处理文件 https://pastebin.com/Ya2Nux4u :

@echo off
 
:: Fullpath current folder : %cd%
:: Fullpath folder where the right click was made : %~f1
:: Name of the folder where the right click was made : for %%f in ("%~f1") do set Name=%%~nxf
 
for %%f in ("%~f1") do set Name=%%~nxf
 
:: Step 1: Creating a temporary folder
mkdir "%~f1-Temp"
 
:: Step 2: Creation of all nfo txt files in the temporary folder
FOR /F "tokens=*" %%G IN ('dir "%~f1" /b *.mkv') DO (
   call "C:\Users\me\Desktop\MediaInfo\MediaInfo.exe" "%~f1\%%G" > "%~f1-Temp\%%~nG.txt"
)
 
:: Step 3: Filling in the final nfo
setlocal enabledelayedexpansion
set i=0
 
FOR /F "tokens=*" %%G IN ('dir "%~f1" /b *.mkv') DO (
   IF !i! == 1 (
     echo ------------------------------------------------------------------------------------------------------------------------------------ >> "%~f1-Temp\%Name%.txt"
     echo. >> "%~f1-Temp\%Name%.txt"
     echo. >> "%~f1-Temp\%Name%.txt"
  )
   cat "%~f1-Temp\%%~nG.txt" >> "%~f1-Temp\%Name%.txt" 
   set i=1
)
endlocal
 
:: Step 4: Removing the path
setlocal
set $source="%~f1-Temp\%Name%.txt"
set $dest="%~f1-Temp\%Name%1.txt"
set "search=%~f1\\"
 
for /f "delims=" %%a in ('powershell -c "(get-content '%$source%') | foreach-object {$_ -replace '(?<=Complete name\s+:\s+).+\\'} | set-content '%$dest%'"') do echo %%a
endlocal
 
:: Step 5: Renaming the nfo and moving to the right place
Ren "%~f1-Temp\%Name%1.txt" "%Name%.nfo"
move "%~f1-Temp\%Name%.nfo" "%~f1"
 
:: Step 6: Deleting temporary files
rmdir /s /q "%~f1-Temp"
 
pause

如果您对已编码的内容有改进或/和更正的建议,请不要犹豫! 预先感谢您的帮助!


我认为您通过向 MediaInfo 提供完整路径作为参数,自己创建了一个问题。如果您只提供文件名,Complete name将仅反映文件名。

此外,除非我误解了你的意图,否则当我认为没有必要时,你就在跳过很多麻烦。

以下示例批处理文件应在您常用的脚本目录中创建,如果您愿意,甚至可以在“文档”目录中创建。

然后你应该在你的“SendTo”目录中创建一个它的快捷方式,给它一个你会理解的名称,也许MediaNFO.

现在您需要做的就是右键单击您的目录并选择Send toMediaNFO。这应该在右键单击的目录中创建一个文件,其名称与该目录相同,并且包含mediainfo它包含的每个受支持文件的输出。这Complete name该行不应包含路径信息,仅包含File name.

@Echo Off
SetLocal EnableExtensions

Set "MIExe=%UserProfile%\Standalone\MediaInfo\MediaInfo.exe"
Set "OutExt=nfo"
Set "HR=------------------------------------------------------------------"

For %%G In ("%~1") Do If "%%~aG" Lss "d" (If "%%~aG" GEq "-" (
        Echo Error! File arg.
        GoTo EndIt) Else (Echo Error! Invalid directory arg.
        GoTo EndIt)) Else If "%%~dG" == "" (
    Echo Error! Full directory path required.
    GoTo EndIt)

If Not Exist "%MIExe%" (Echo Error! MediaInfo not found.
    GoTo EndIt)

PushD "%~1"

Set "ExtLst="
For %%G In (aac ac3 aifc aiff ape asf au avi avr dat dts flac iff ifo irca m1v
    m2v mac mat mka mks mkv mov mp2 mp3 mp4 mpeg mpg mpgv mpv ogg ogm paf pvf qt
    ra rm rmvb sd2 sds vob w64 wav wma wmv xi) Do If Not Defined ExtLst (
    Set "ExtLst=".":"*.%%G"") Else Call Set "ExtLst=%%ExtLst%% ".":"*.%%G""

Set "}=%PATHEXT%" && Set "PATHEXT="
%SystemRoot%\System32\where.exe /Q %ExtLst%
If ErrorLevel 1 (Echo Error! Directory has no supported files.
    GoTo EndIt)

Set "i="
(For /F "Delims=" %%G In ('%SystemRoot%\System32\where.exe %ExtLst% 2^> NUL'
) Do (If Defined i Echo %HR%
    "%MIExe%" "%%~nxG"
    Set "i=T")) 1> "%~nx1.%OutExt%"

:EndIt
%SystemRoot%\System32\timeout.exe /T 3 /NoBreak 1> NUL
GoTo :EOF

您可以更改位置mediainfo.exe在线的4,以及输出扩展,在线5;但不应修改其他任何内容。

您还应该注意,我已向此脚本添加了一些输入验证。如果您的输入目录不是包含现有 mediainfo 可执行文件的支持文件的完全限定目录路径,它将报告错误并关闭。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件夹内的批处理文件创建 MediaInfo.nfo 文件 的相关文章

  • 有没有更有效的方法通过ffmpeg批量添加水印和加入视频?

    我有这个批处理文件 使用 ffmpeg 在我的视频中添加徽标 然后添加简介 但需要 10 小时到一天的时间 具体取决于我需要添加水印的数量 是否有更有效的方法来实现此目的 视频有时具有不同的分辨率 因此我无法删除到 1280 720 尺寸的
  • 如何获取通过网络驱动器访问的文件的 UNC 路径?

    我正在 VC 中开发一个应用程序 其中网络驱动器用于访问文件 驱动器由用户手动分配 然后在应用程序中选择驱动器 这会导致驱动器并不总是映射到相同的服务器 我该如何获取此类文件的 UNC 路径 这主要是为了识别目的 这是我用来将普通路径转换为
  • 无法从本地文件夹运行 Jquery

    你好 我是网络开发新手 我需要与JQuery 即使我已经成功尝试过一个jquery但仅在将文件复制到我的在线 ftp 文件夹后 我完全无法从本地文件夹运行它 请解释一下 如何我可以测试一些新脚本吗 进行额外的练习将文件复制到 ftp 文件夹
  • Windows Batch 帮助从命令输出设置变量[重复]

    这个问题在这里已经有答案了 我需要运行一个简单的 find 命令并将输出重定向到 Windows 批处理文件中的变量 我已经尝试过这个 set file ls find txt echo file 但这不起作用 如果我运行此命令 它可以正常
  • 使用 set /p 更新批处理脚本的变量始终包含最后一个值

    我正在尝试使用 set p 命令在循环内调整 Windows 批处理变量 键盘输入后 变量仍然包含旧值 我读到通过 set p 设置的变量仅具有本地范围 但我不明白 本地 在这里的真正含义 echo off setlocal EnableD
  • DOS批处理文件for循环中的变量赋值问题

    我在 DOS 脚本 for 循环中遇到变量赋值问题 它从不分配值 它总是空白 下面是示例代码 echo off set ans 1 SET STRING ans echo Parsing the string STRING for f to
  • 如何让批处理文件等待另一个批处理文件完成执行?

    如何让一个批处理文件等待另一个批处理文件完成 例如 我有 echo hi gt r txt echo some piece of code gt gt r txt start ar bat echo some piece of code g
  • Netbeans Maven 项目 - 其他来源未出现

    在Netbeans Maven项目中 逻辑文件夹中的Other Source通常是一些文本 xml等文件的存储 但是 我不明白它到底何时出现以及如何在创建新项目时创建它 我尝试过 与带有 junit 测试文件的测试包相同 右键单击Proje
  • 从目录获取第一个文件名的批处理脚本

    我的函数需要特定目录中的第一个文件名来使用第一个文件处理一些测试 完成测试后从目录中删除第一个文件 我尝试如下 FOR R
  • 忽略批处理文件中的百分号

    我有一个批处理文件 可将文件从一个文件夹移动到另一个文件夹 批处理文件是由另一个进程生成的 我需要移动的一些文件中包含字符串 20 move y myserver myfolder file 20name txt myserver othe
  • 如何使用Windows批处理命令删除“无扩展名的文件”的所有内容

    我想删除以 FIlE 为扩展名的文件的内容 即没有扩展名 我知道如何删除文本文件的内容 但不知道如何删除以 文件 为扩展名的文件 我会感谢你的努力 提前致谢 Use Del 在批处理文件中删除没有扩展名的文件 use Dir A D 列出所
  • 使用脚本查找字符串长度的奇怪结果?

    我正在测试 unmeat 提交的这段代码这个问题 https stackoverflow com questions 21817684 batch get string length with special characters 肉叔叔引
  • 排除批复制脚本中的文件夹

    我正在使用 U 盘上的批处理文件来备份我的照片 我使用以下命令 for r C x in jpg png gif do copy y x 我想排除邮件文件夹 WINDOWS 和 PROGRAM FILES 中的文件 有谁知道如何使用批处理文
  • .bat 文件将文件排序到文件夹中

    对于我的图片集 我希望文件夹中的所有图片按日期自动分类到文件夹中 幸运的是 这些文件已经以时间戳命名 2012 07 15 12 21 06 jpg 2012 07 15 12 21 26 jpg 2012 07 16 12 12 50 j
  • 批处理脚本 - 逐行读取

    我有一个日志文件 我需要逐行读入并将该行传送到下一个循环 首先 我在一个单独的文件中 grep 日志文件中的 主 字 如 错误 以保持其较小 现在我需要获取单独的文件并逐行读取它 每行都需要进入另一个循环 在这些循环中我 grep 日志并将
  • 如何向未知用户目录读取/写入文件?

    我正在尝试从用户目录 C Users USERNAME Test Source 读取和写入文件 但我未能成功找到任何有关如何自动检测用户名的资源 其中的 USERNAME上面的例子 或者无论如何 我可以让它读取和写入目录 而不需要知道用户名
  • 将文件夹中的每个文件移动到以该文件命名的自己的文件夹中的批处理脚本?

    所以如果我有 folder file1 txt folder file2 jpg folder file3 py 我想创建 folder file1 file1 txt folder file2 file2 jpg folder file3
  • 无法使用 cd 前进

    我在使用 PowerShell 前进时遇到问题 我可以向上移动目录 但不能向下移动 情况是这样的 我打开 PowerShell 并输入 pwd 命令 它显示我当前处于PS C Users Robert Inspiron14 gt 我输入命令
  • 在 OSX 上检测 Objective C 或 C++ 中的文件夹访问(如 fs_usage 命令)

    我正在 OSX 上开发实时病毒扫描程序 OSX 的命令行命令fs usage可以通过以下方式确定文件夹访问权限 并且只能以 root 用户身份运行 fs usage w f pathname grep Users Documents Use
  • 为什么标签存在却提示“系统找不到指定的批次标签”?

    在 Windows XP 中运行批处理文件时 我发现随机出现的错误消息 系统找不到指定name of label的批次标签 标签当然存在 导致此错误的原因是什么 实际上 要实现这一点 你需要两个条件 批处理文件不得使用 CRLF 行结尾 您

随机推荐