使用文件名列表重命名批处理文件
Posted
技术标签:
【中文标题】使用文件名列表重命名批处理文件【英文标题】:Batch files rename using filename list 【发布时间】:2014-02-22 13:37:38 【问题描述】:我需要重命名超过 1500 个 *.jpg 文件。 我有带有 2 列文件名列表的文本文件,制表符分隔:
1305 1979 1310 173 1311 172旧文件名 - 新文件名
1305_1.jpg - 1979 1310_main_origin.jpg - 173 1311_2.jpg - 172如何检查第一列的前 4 位数字和旧文件名,并从 2 列重命名为另外 4 位数字?
//对不起我的英语
【问题讨论】:
我不明白:文件只是1305
或1305_01.jpg
...?意思是,mv col1 col2
会成功吗?
我的旧文件名在 1305、1310、1311 等之后有不同的结尾。我需要将其重命名为 2 列中的名称。
这是 Windows 还是 Unix 环境?
【参考方案1】:
使用如下所示的循环:
while read -r old new
do
arr=( $old_*.jpg )
if (( $#arr[@] == 1 ))
then
mv "$arr[0]" "$new.jpg"
else
echo "Error: Multiple files found for $old: $arr[@]"
fi
done < file
请注意,有一项安全检查可确保您没有多个具有相同前缀的文件。例如,如果您有1305_1.jpg
和1305_2.jpg
,则不能将它们都重命名为1979.jpg
,因此脚本会打印错误。
【讨论】:
【参考方案2】:试试这个,并在确认它是你想要的之后删除 echo。 changefile
是包含更改的文件的名称
while read from to; do
echo "mv $from* $to"
done < changefile
您应该颠倒更改文件的顺序,以确保在 130 之前和 13 之前应用 1306
【讨论】:
【参考方案3】:我已经为另一个问题发布了这个答案,但这个答案在问题、关键字和复杂性方面似乎更相关,我也会在这里添加。
您可以使用小型 linux 应用名称 krename,并打开 javascript 插件。它是一款免费工具,具有非常强大的重命名功能。
-
安装 Krename 并打开它
添加文件
转到插件选项卡并将您的 javascript 函数添加到函数定义部分,如下所示:
var files = [
"Mickey",
"Donald",
"Duffy"
];
function rename()
// krename_index is one of many special variables which can be added via ui
return files[krename_index];
这是一个可以完成工作的简单脚本,但它可以任意复杂。
转到文件名选项卡并在模板输入中调用您的函数,如下所示:
[js; rename()]
您可以在上面的代码前面加上$
以保留原始文件名并添加到它。您可以使用“功能”按钮进行进一步实验。
-
通过单击“完成”按钮预览新名称并完成重命名。
【讨论】:
以上是关于使用文件名列表重命名批处理文件的主要内容,如果未能解决你的问题,请参考以下文章