【问题标题】:Script to rename files in folder to match names of files in another folder脚本重命名文件夹中的文件以匹配另一个文件夹中的文件名
【发布时间】:2012-06-06 06:00:48
【问题描述】:

鉴于以下情况,我需要进行批量重命名:

  1. 我在文件夹 A 中有一堆文件
  2. 文件夹B中的一堆文件。
  3. 文件夹A中的文件都是“.doc”,
  4. 文件夹B中的文件都是“.jpg”。
  5. 文件夹 A 中的文件名为“A0001.doc”
  6. 文件夹 B 中的文件名为“A0001johnsmith.jpg”

我想合并文件夹,并重命名文件夹 A 中的文件,以便它们附加文件夹 B 中匹配文件的名称部分。

例子:

之前:

FOLDER A:     Folder B:
A0001.doc     A0001johnsmith.jpg

之后:

Folder C:
A0001johnsmith.doc 
A0001johnsmith.jpg

我见过一些批量重命名脚本,但唯一的区别是我需要分配一个变量来包含名称部分,以便我可以将它附加到文件夹 A 中相应文件的末尾。

我认为最好的方法是编写一个简单的 python 脚本,该脚本将执行递归循环,对文件夹中的每个项目进行如下处理:

  1. 解析 A0001.doc 的文件名
  2. 将字符串与文件夹 B 中的文件名匹配
  3. 取匹配的字符串之后但在“.”之前的部分。并分配变量
  4. 取原始字符串 A0001 并附加包含 name 元素的变量并重命名它
  5. 将两个文件复制到文件夹 C(非破坏性,以防出现错误等)

我正在考虑为此使用 python,但我可以在语法等方面使用一些帮助。我只知道一点使用基本的python库,我猜我会导入诸如“OS”之类的库,也许还有“SYS”。我以前从未使用过它们,任何帮助将不胜感激。我也愿意使用 Windows 批处理脚本甚至 powershell。任何输入都是有帮助的。

【问题讨论】:

    标签: python regex batch-file rename


    【解决方案1】:

    使用简单的批处理脚本非常简单。

    @echo off
    for %%A in ("folderA\*.doc") do (
      for %%B in ("folderB\%%~nA*.jpg") do (
        copy "%%A" "folderC\%%~nB.doc"
        copy "%%B" "folderC"
      )
    )
    

    我没有添加任何错误检查。

    如果您有一个像“A1.doc”这样的文件匹配多个像“A1file1.jpg”和“A10file2.jpg”这样的文件,您可能会遇到问题。

    只要 .doc 文件具有固定宽度的名称,并且每个 .doc 都存在一个 .jpg,那么我认为代码应该可以工作。

    显然可以添加更多代码来处理各种场景和错误情况。

    【讨论】:

      【解决方案2】:

      这是 Powershell,因为你说过你会使用它。

      请注意,我没有对此进行测试。我现在无法访问 Windows 机器,因此无法对其进行测试。我是根据记忆得出的,但我认为它基本上是正确的。

      foreach($aFile in ls "/path/to/FolderA")
      {
          $matchString = $aFile.Name.Split("."}[0]
          $bFile = $(ls "/path/to/FolderB" |? { $_.Name -Match $matchString })[0]
          $addString = $bFile.Name.Split(".")[0].Replace($matchString, "")
          cp $aFile ("/path/to/FolderC/" + $matchString + $addString + ".doc")
          cp $bFile "/path/to/FolderC"
      }
      

      这对名称结构做了很多假设。例如,我假设要添加的字符串不会出现在通用文件名字符串中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-10
        • 2017-02-08
        • 1970-01-01
        • 2018-12-23
        • 1970-01-01
        • 2015-07-13
        相关资源
        最近更新 更多