使用文件名列表重命名批处理文件

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 位数字?

//对不起我的英语

【问题讨论】:

我不明白:文件只是13051305_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.jpg1305_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()]

您可以在上面的代码前面加上$ 以保留原始文件名并添加到它。您可以使用“功能”按钮进行进一步实验。

    通过单击“完成”按钮预览新名称并完成重命名。

【讨论】:

以上是关于使用文件名列表重命名批处理文件的主要内容,如果未能解决你的问题,请参考以下文章

批处理:批量重命名父文件夹下所有子文件夹里的文件

用bat文件重命名一个文件的命令怎么写?

Bat批处理:批量重命名包含指定名称文件夹里的指定文件

使用内容重命名 PDF 文件的批处理脚本

bat批处理文件夹下所有子文件夹下最后一个的文件重命名?

使用批处理文件重命名和格式化 Excel 工作表