【问题标题】:Renaming multiple files in cmd (windows) or with Python在 cmd (windows) 或 Python 中重命名多个文件
【发布时间】:2019-02-25 14:53:03
【问题描述】:

我正在尝试将名称为 p01p02 等的 470 个文件列表重命名为每个文件的特定名称。所以我有一个列表(.txt 或 .xls),这些文件名的顺序正确,但我无法找出一个 for 循环来批量重命名它。
我已经检查了这个论坛和谷歌上的其他线程,但无法得到我需要的结果。
希望有人对此有解决方案... Python 或 cmd 窗口都是可能的。

简而言之:

p01.pdf --> Blabla.pdf

p02.pdf --> 其他文本.pdf
....

【问题讨论】:

  • 您的列表是否还包含旧名称或仅包含正确顺序的新名称?
  • 不管怎样,我有一个 Excel 表格,新旧名称以正确的顺序彼此相邻
  • 我使用 cmd 创建文件列表,然后使用 Excel 将它们按正确的顺序排列。根据我放在正确p0x 旁边的名称列表,这就是它目前在 Excel 中的原因。但它可以导出到任何列表
  • 你不能暴力破解一个带有批处理的 excel 文件。您需要基于文本的文件,即 txtcsv
  • for filename in os.listdir('path/to/files'): 将遍历您目录中的所有文件。然后你可以使用 if 检查旧文件名并重命名它。

标签: python batch-file cmd renaming


【解决方案1】:

Python 3

  1. 首先将您的旧文件名和新文件名导出到filenames.txt 文件。其内容格式应为old_filename.pdf,new_filename.pdf:

    p01.pdf,blabla.pdf
    p02.pdf,foobar.pdf
    
  2. 然后在目录下创建一个python文件rename.py

    脚本从该文件中读取每一行并使用os.rename(src, dest) 相应地重命名您的文件:

    import os
    
    with open("filenames.txt", mode="r") as open_file:
        filenames = open_file.readlines()
    
    for filename in filenames:
        separator_index = filename.find(",")
        old_filename = filename[:separator_index]
        new_filename = filename[separator_index + 1:] # +1 to exclude the comma from the new filename
    
        os.rename(old_filename, new_filename)
    
  3. 现在,要执行您的脚本,请在该目录中打开 cmd.exe 并输入:

    $ python3 rename.py
    

不同的路径

如果您的文件不在同一个目录中,只需将它们的路径添加到filenames.txt,如下所示:

path/to/old_filename.pdf,path/to/new_filename.pdf

专业提示: 在 Windows 资源管理器中导航到所有文件所在的文件夹,按 CTRL + L 突出显示导航栏,写入cmd 并按ENTER 确认。 cmd.exe 现在应该使用已设置的文件夹的正确路径直接打开。

【讨论】:

    【解决方案2】:

    对于批处理解决方案,创建文本文件并添加以逗号分隔的名称,我们将其命名为 filenames.txt

    p01.pdf,Blabla.pdf
    p02.pdf,Othertext.pdf
    ...
    

    然后做一个批处理文件:

    for /f "tokens=1,2 delims=," %%i in (filenames.txt) do ren "%%i" "%%j"
    

    或者直接从控制台(cmd.exe)这完全一样,我们只是使用单个%而不是双%%

    for /f "tokens=1,2 delims=," %i in (filenames.txt) do ren "%i" "%j"
    

    【讨论】:

    • 感谢您的回复!但是当我运行它时,我收到以下错误:%%i was unexpected at this time filenames.txt 在同一个文件夹中,看起来和你提到的完全一样。
    • 您是从 cmdline 运行它还是批处理文件似乎您从 cmdline 运行了批处理选项(第一个脚本行),这在 cmdline 中不起作用,因为它只需要一个 % 请参阅完整答案。
    • 抱歉,我忘了刷新评论,没有注意到编辑。
    猜你喜欢
    • 1970-01-01
    • 2013-06-20
    • 2018-09-04
    • 2018-06-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    相关资源
    最近更新 更多