如何批量修改照片文件名?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何批量修改照片文件名?相关的知识,希望对你有一定的参考价值。

我们有一堆照片,使用序号命名,我们现在想要将它的命名改序号加姓名,,请问有没有简便的方法。能不能最好不要一个一个的改,求简便方法。

===========================
假设你的文件都在c:\picture\目录里,名字是张三.jpg, 李四.jpg等等

Excel里面A B两列分别是:

张三,110108190001010011
李四,122036200901010022
...

===========================
按以下步骤操作:

1. 在C1单元格里加入以下公式
="rename ""c:\picture\"&A1&".jpg"" "&B1&".jpg"
2. 点C1右下角的加号把公式向下拖动到整个C列
3. 那么C列的内容就变成了:
rename "c:\picture\张三.jpg" 110108190001010011.jpg
...
4. 把C列的内容复制出来,打开记事本粘贴进去,然后保存为r.bat, 点击r.bat运行即可。

注意:
1. 提前备份,以防操作失误
2. 注意根据实际情况修改公式里的目录c:\picture
3. 最好把姓名和身份证号放在A/B两列,这样就不用修改公式里的其他部分。
参考技术A

批量修改照片名称的方法:

步骤1,下载软件工具后安装打开使用,点击【添加文件】按钮将照片全部导入到软件中,也可以通过拖拽图片到软件上的方式进行添加。

步骤2,导入完照片后就可以进行设置了,命名方式选择“自定义”;然后在下面输入新文件名;最后进行编号设置:起始是一个照片的编号,增量是后一个编号比前一个增加的数值,位数是编号一共几位的意思(如01的位数是2)。在右边可以实时预览到新的照片名称,方便我们及时调整。

步骤3,当你预览觉得新名称没有问题后点击【开始重命名】按钮,启动软件程序。当弹出“重命名”成功的提示框时说明软件处理完成啦。

步骤4,查看刚刚修改后的照片名称,可以看到新的照片名称很规范,有文件名有编号,非常的整齐好看。

参考技术B 文件名只有序号,那么脚本要想重命名为序号加姓名,那么就必须得让脚本或软件知道每个序号对应的姓名是什么,这样才能写出批量重命名的脚本或软件。
您习惯用excel的话,那么就像您表格中那样生成相应命令,然后把这个命令保存为bat脚本,并放至文件那执行即可。追问

bat脚本内容怎么写,我不懂命令,网上查的都用不了,还有的改后是乱码

追答

您excel右侧不是已经有生成的命令吗?直接拷贝它们,然后粘贴到一个新文本中,文本保存时的编码务必选择为ANSI,这样就不会乱码了。然后文本后缀名改为bat即可。把这个bat放到图片文件一起即可

如果您有对应的名字和序号列表文件,限于文本,那么倒是可以直接通过脚本读取列表来进行修改。

您看看想要哪种方式?

来自:求助得到的回答
参考技术B 以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的文件放一起双击运行
<# :
cls
@echo off
rem 将当前目录里的多个jpg文件按照原有排序分别在名称末尾添加不同字符串内容
set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%@% %z%
cd /d "%~dp0"
powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::GetEncoding('GB2312')))) -Args '%~f0'"
echo;%#% +%$%%$%/%@% %z%
pause
exit
#>
$ext=@('.jpg');
$namelist=@"
刘一
陈二
张三
李四
王五
赵六
孙七
周八
吴九
郑十
"@;
$codes=@'
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
public static class ExpDir

[DllImport("Shlwapi.dll", CharSet=CharSet.Unicode)]
public static extern int StrCmpLogicalW(string p1, string p2);
public static string[] Sort(string[] f)

Array.Sort(f, StrCmpLogicalW);
return f;


'@;
Add-Type -TypeDefinition $codes;
$arr=$namelist.trim() -split '[\r\n]+';
[byte[]]$b=@(32,45,45,62,32);
$c=[Text.Encoding]::Default.GetString($b);
$self=get-item -liter $args[0];
$path=$self.Directory.FullName;
$files=@(dir -liter $path|?($ext -contains $_.Extension) -and ($_ -is [System.IO.FileInfo])|%$_.Name);
if($files.length -ge 1)
$brr=[ExpDir]::Sort($files);
for($i=0;$i -lt $brr.length;$i++)
$f=get-item -liter $brr[$i];
if($i -lt $arr.length)
$newname=$f.BaseName+$arr[$i]+$f.Extension;
$brr[$i]+$c+$newname;;;追问

不行啊

追答

文件太少了,这是一一对应关系,姓名数量跟文件数量要一致

Python批量修改照片日期

需求
最近整理老照片,有一些照片缺失日期信息,或者日期显示错误,传到手机相册就会显示在上传的这一天,导致时间线错乱。

因为照片文件名包含日期(比如IMG_20210422_075810.jpg),所有可以根据文件名修改照片日期,这样在手机里就可以按照时间线排列了,主要利用piexif库修改JPG照片的Exif信息。

# photo time correction 
# 2021.04 @Wendell
# 需求:一些照片exif里面没有日期信息,传到手机就会显示在上传的这一天,导致时间线错乱
# 发现文件名包含日期,根据文件名修改照片日期,这样在手机里就可以按照时间线排列了

import os
import piexif

def checkFormat(photoPwd):
    '''
    检查文件类型是否为图片格式
    '''
    (root, ext) = os.path.splitext(photoPwd)
    return str.upper(ext[1:]) # 返回文件后缀类型

def getTime(photoName):
    '''
    根据文件名特征提取照片拍摄日期,转换为Exif时间格式
    from 'IMG_20210422_075810.jpg' to '2024:04:22 07:58:10'
    '''
    pN = photoName
    # from IMG_20210422_075810.jpg to 2024:04:22 07:58:10
    imgTime = f'pN[4:8]:pN[8:10]:pN[10:12] pN[13:15]:pN[15:17]:pN[17:19]'
    return imgTime

def setDate(photoName, photoPwd):
    '''
    给没有时间的照片加上时间
    '''
    imgTime = getTime(photoName)
    # 设置Exif信息
    exif_dict = piexif.load(photoPwd) # 读取现有Exif信息
    exif_dict['0th'][piexif.ImageIFD.DateTime] = imgTime # 注意DateTime在ImageIFD里面
    exif_dict['Exif'][piexif.ExifIFD.DateTimeOriginal] = imgTime
    exif_dict['Exif'][piexif.ExifIFD.DateTimeDigitized] = imgTime
    exif_bytes = piexif.dump(exif_dict)
    # 插入Exif信息
    piexif.insert(exif_bytes, photoPwd)         

def changePhotoTime(folder):
    """
    修改该路径下的所有JPG照片的时间
    """
    for photoName in os.listdir(folder):
        photoPwd = os.path.join(folder, photoName) # 照片的绝对路径
        if checkFormat(photoPwd) == 'JPG': # 如果是JPG
            setDate(photoName, photoPwd)  
          
if __name__ == '__main__':
    '''
    folder: 文件夹路径
    '''
    folder = r"D:\\照片\\测试"
    changePhotoTime(folder)

以上是关于如何批量修改照片文件名?的主要内容,如果未能解决你的问题,请参考以下文章

bat批量修改照片名改完后顺序不对

Python批量修改照片日期

Python批量修改照片日期

Python批量修改照片日期

使用python对文件夹下的照片进行批量修改尺寸

如何以照片的拍摄时间批量重命名文件