【问题标题】:使用 MediaInfo 工具的输出批量重命名文件
【发布时间】:2022-01-21 12:07:17
【问题描述】:

我希望你能在这里帮忙。我对 MacOS 上的批处理命令文件或 Bash 命令文件都不是很有经验(非常欢迎)。

我有数千个 AVI 格式的视频文件(DV 录制文件),其中包含使用 MediaInfo 工具检索的录制日期和时间。 我想使用录制日期信息重命名文件,因为我想用更高效的编解码器 [H.265] 重新编码它们,从而丢失文件中的元信息。 我认为保留信息的最简单方法是将其存储在文件名中。文件名现在带有从 DV 视频传输到 PC 的日期。

我发现this article 非常有用,基于此,我尝试制作一个适用于 Windows 命令提示符的版本。我可以从 MediaInfo 检索正确的信息,但无法让批处理文件正确执行。 for 循环有问题,但我无法弄清楚。我相信有人可以在这里提供帮助。

 @echo off & setlocal
cd C:\Users\dagsp\Desktop
for /f "delims=" %%i in ('dir /b /a-d *.avi') do (
    set "fnameo=%%~ni"
    set "fnamee=%%~xi"
    set "RecDate="
    for /f "delims=" %%j in ('mediainfo "--Inform=General;%%Recorded_Date%%" "%%~i"') do set "RecordingDate=%%j" 
    setlocal enabledelayedexpansion
    call set "selftest=%%fnameo:[RecDate !RecDate!p]=%%"
    if "!selftest!" equ "!fnameo!" if not exist "!fnameo! [RecDate !RecDate!p]!fnamee!" (
        echo rename "!fnameo!!fnamee!" "!fnameo! [RecDate !RecDate!p]!fnamee!"
    )
    endlocal

【问题讨论】:

  • RecordingDate 在线 7,不应该改为 RecDate?`
  • 你收到错误信息了吗?
  • @Compo,确实是的,谢谢!
  • 我没有收到一些错误信息,这很奇怪。

标签: for-loop batch-file metadata rename mediainfo


【解决方案1】:

感谢我的朋友 Rob,他为 MacOS 编写了一个 bash 脚本,解决了我的问题。为了您的兴趣,这是脚本:

for file in $(find . -name \*.avi | sed -e 's/ /@@@/g')
do
file=$(echo "$file" | sed -e 's/@@@/ /g')
record_date=$(mediainfo --Inform=General "$file" | grep 'Recorded date')

if [[ -n "$record_date" ]]; then
    date=$(echo "$record_date" | cut -c44-59 | tr ' ' '-' | tr ':' '-')
    new_name="$(echo $(dirname "$file")/"$date".avi)"
    echo "Found recording date -> renaming $file to $new_name"
    mv "$file" "$new_name"
else
    echo "No recording date found in file $file -- skipping"
fi
done

【讨论】:

    猜你喜欢
    • 2010-10-10
    • 2011-01-23
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    相关资源
    最近更新 更多