如何在批处理文件中包含目录和子目录

如何在批处理文件中包含目录和子目录

我找到了一个批处理文件脚本来完成我需要做的工作。我在获得此代码的帖子的评论中提出了如何在批处理过程中递归添加目录和子目录的问题,但 4 个月后无人回复。我在这个网站上搜索找不到这个问题的答案,所以我想我会就这个主题开始一个新的帖子。

我想要做的是能够批量更改 MKV 文件中的元数据信息,就这样完成了。

#!/bin/bash

# This script takes all mkv files in the current directory and sets the filename
# (without .mkv) as its title in metadata

for mkvfile in *.mkv; do
mkvpropedit "$mkvfile" -e info -s title="${mkvfile::-4}"
done

我该如何修改它以在根目录上运行,从而在过程中包含所有文件夹和子文件夹?谢谢!

答案1

使用 bash,您可以设置globstarnullglobshell 选项并使用**递归到子目录:

shopt -s globstar nullglob
for mkvfile in **/*.mkv; do
    mkvpropedit "$mkvfile" -e info -s title="${mkvfile::-4}"
done

4.3.2 Shopt 内置 在手册中。

请注意,您还可以使用它${mkvfile%.mkv}来砍掉扩展名。

你也可以使用 find,但我认为它变得很丑陋

find . -name '*.mkv' -exec sh -c 'mkvpropedit "$1" -e info -s title="$(basename "${1%.mkv}")"' sh {} \;

相关内容