[英]Script to rename files in folder to match names of files in another folder
鉴于以下情况,我需要进行批量重命名:
我想合并文件夹,并重命名文件夹A中的文件,以便它们在文件夹B中附加匹配文件的名称部分。
例:
之前:
FOLDER A: Folder B:
A0001.doc A0001johnsmith.jpg
后:
Folder C:
A0001johnsmith.doc
A0001johnsmith.jpg
我看过一些批量重命名脚本,但唯一的区别是我需要分配一个变量来包含名称部分,这样我就可以将它附加到文件夹A中相应文件的末尾。
我认为最好的方法是做一个简单的python脚本,它会做一个递归循环,处理文件夹中的每个项目,如下所示:
我正在考虑使用python,但我可以使用语法等方面的帮助。 我只知道一点使用基础python库,我猜我会导入诸如“OS”之类的库,也许是“SYS”。 我以前从未使用过它们,任何帮助都会受到赞赏。 我也愿意使用Windows批处理脚本甚至PowerShell。 任何输入都有帮助。
这是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"
}
这对名称结构做了很多假设。 例如,我假设要添加的字符串不会出现在公共文件名字符串中。
使用普通批处理脚本非常简单。
@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,那么我认为代码应该可以工作。
显然,可以添加更多代码来处理各种场景和错误情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.