使用序号重命名同名文件?
Renaming files with the same name using sequential numbers?
我觉得这很简单,但我遗漏了一些东西。我有 130 个文件夹,所有文件夹都包含相同的文件“Document.pdf”。当然,每个文件的内容各不相同,但它们都具有相同的名称和扩展名。我想要做的是让一个脚本获取所有这 130 个文件,并按顺序为它们命名从“1.pdf”到“130.pdf”。文件夹也按顺序排列 (1-130)。我在本地存储和 Google 驱动器上都有这些文件夹,因此任何涉及 bash 或 GScripts 的解决方案都适合我。谢谢。
这应该可以解决问题:
代码:
function renameFiles() {
var iter = 1;
while (iter <= 130) {
Logger.log(iter);
var folders = DriveApp.getFoldersByName(iter);
while (folders.hasNext()) {
var folder = folders.next();
Logger.log("Folder: " + folder.getName());
var files = folder.getFilesByName("Document.pdf");
while (files.hasNext()) {
var file = files.next();
file.setName(iter + "." + file.getMimeType().substr(-3));
Logger.log("File: " + file.getName());
}
}
iter++;
}
}
假设:
- 文件夹命名为
1
、2
、....130
示例输出:
假设目录实际上被命名为 1
、2
,以此类推直至并包括 130
,这是一个 bash 解决方案:
# Edit this to desired path
parent_dir='.'
find "$parent_dir" -maxdepth 1 -type d | while read -r directory; do
dir_name="$(basename directory)"
if [ "$dir_name" -ge 1 ] && [ "$dir_name" -le 130 ]; then
mv "$directory/Document.pdf" "$directory/$dir_name.pdf"
fi
done
这使用 basename
获取每个目录的名称(即 1 到 130 之间的值),并使用它来重命名 Document.pdf
个文件。
请注意 -maxdepth
不是 POSIX。要将 -maxdepth
替换为 POSIX 选项,请参阅 this answer。
我觉得这很简单,但我遗漏了一些东西。我有 130 个文件夹,所有文件夹都包含相同的文件“Document.pdf”。当然,每个文件的内容各不相同,但它们都具有相同的名称和扩展名。我想要做的是让一个脚本获取所有这 130 个文件,并按顺序为它们命名从“1.pdf”到“130.pdf”。文件夹也按顺序排列 (1-130)。我在本地存储和 Google 驱动器上都有这些文件夹,因此任何涉及 bash 或 GScripts 的解决方案都适合我。谢谢。
这应该可以解决问题:
代码:
function renameFiles() {
var iter = 1;
while (iter <= 130) {
Logger.log(iter);
var folders = DriveApp.getFoldersByName(iter);
while (folders.hasNext()) {
var folder = folders.next();
Logger.log("Folder: " + folder.getName());
var files = folder.getFilesByName("Document.pdf");
while (files.hasNext()) {
var file = files.next();
file.setName(iter + "." + file.getMimeType().substr(-3));
Logger.log("File: " + file.getName());
}
}
iter++;
}
}
假设:
- 文件夹命名为
1
、2
、....130
示例输出:
假设目录实际上被命名为 1
、2
,以此类推直至并包括 130
,这是一个 bash 解决方案:
# Edit this to desired path
parent_dir='.'
find "$parent_dir" -maxdepth 1 -type d | while read -r directory; do
dir_name="$(basename directory)"
if [ "$dir_name" -ge 1 ] && [ "$dir_name" -le 130 ]; then
mv "$directory/Document.pdf" "$directory/$dir_name.pdf"
fi
done
这使用 basename
获取每个目录的名称(即 1 到 130 之间的值),并使用它来重命名 Document.pdf
个文件。
请注意 -maxdepth
不是 POSIX。要将 -maxdepth
替换为 POSIX 选项,请参阅 this answer。