使用MediaInfo工具的输出批量重命名文件



我希望你能在这里提供帮助。我对MacOS上的批处理命令文件或Bash命令文件都不太熟悉(非常欢迎(。

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

我发现这篇文章非常有用,基于此,我尝试制作一个在Windows命令提示符下适用的版本。我可以从MediaInfo中检索正确的信息,但我无法正确执行批处理文件。for循环有问题,但我想不通。我相信有人能在这里帮忙。

@echo off & setlocal
cd C:UsersdagspDesktop
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

感谢我的朋友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

最新更新