用于重命名文件夹中文件以匹配其他文件夹中文件名称的脚本

时间:2012-05-31 23:52:30

标签: python regex batch-file rename

在下列情况下,我需要进行批量重命名:

  1. 我在文件夹A中有一堆文件
  2. 文件夹B中的一堆文件。
  3. 文件夹A中的文件都是“.doc”,
  4. 文件夹B中的文件都是“.jpg”。
  5. 文件夹A中的文件名为“A0001.doc”
  6. 文件夹B中的文件名为“A0001johnsmith.jpg”
  7. 我想合并文件夹,并重命名文件夹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(非破坏性,如果有错误等)
    6. 我正在考虑使用python,但我可以使用语法等方面的帮助。我只知道一点使用基础python库,我猜我会导入诸如“OS”之类的库,也许是“SYS”。我以前从未使用过它们,任何帮助都会受到赞赏。我也愿意使用Windows批处理脚本甚至PowerShell。任何输入都是有帮助的。

2 个答案:

答案 0 :(得分:1)

这是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"
}

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

答案 1 :(得分: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,那么我认为代码应该可以工作。

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