将电影文件夹批量重命名为文件夹内的电影文件吗?

将电影文件夹批量重命名为文件夹内的电影文件吗?

我想重命名电影文件夹名称,使其与电影文件夹内的电影文件名称一致。电影文件的名称正确,但文件夹名称不正确。

我已经找到了批处理文件重命名选项,用于将文件夹内的文件重命名为文件夹名称,但我需要做相反的事情。

我发现了这一点:

RENAME [drive:][path][directoryname1 | filename1] [directoryname2 | filename2]

不确定这是否可行?另外,不确定如何在路径中归档等。

我是新手,不知道该怎么做。如果有人能给出一个例子就好了。

此批处理文件重命名器将重命名电影文件夹中的所有文件夹,以匹配文件夹内的电影文件名。

答案1

您可以使用 bash shell 吗?以下是当前工作目录的直接子目录中的 mp4 电影的示例。

for movie in */*.mp4
do
    dir="${movie%/*}"   # strips shortest suffix that starts with /
    name="${movie##*/}" # strips longest prefix that ends with /
    name="${name:: -4}" # strips last 4 characters (.mp4)
    mv "$dir" "$name"   # renames the directory (only for direct subdirs)
done

如果您想要浏览多个父目录,我们称之为类型,您可以将其作为内循环包含到外循环中,如下所示:

for parent in /my/comedies /her/documentaries /his/movies/personal
do
    pushd "$parent"         # makes parent the current working directory
    for movie in */*.mp4    # loop over mp4 files in direct subdirs of parent
    do
        dir="${movie%/*}"   # strips shortest suffix that starts with /
        name="${movie##*/}" # strips longest prefix that ends with /
        name="${name:: -4}" # strips last 4 characters (.mp4)
        mv "$dir" "$name"   # renames the directory (only for direct subdirs)
    done
    popd                    # return to previous working directory
done

还有其他方法可以做到这一点,但是如果您对 bash 不太熟悉,您可能不想摆弄 bash 的变量语法${variable...}。一个明显的修改是将第一个替换**/*.mp4更复杂的字母和通配符模式;在 bash 中,它们与经典 Windows 命令提示符中的大体相同,例如,*1987*/*.mp4对于其中包含文本的所有子目录1987

相关内容