我想重命名电影文件夹名称,使其与电影文件夹内的电影文件名称一致。电影文件的名称正确,但文件夹名称不正确。
我已经找到了批处理文件重命名选项,用于将文件夹内的文件重命名为文件夹名称,但我需要做相反的事情。
我发现了这一点:
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
。