2017-05-13 55 views
1

故事将其重命名: 我有每个1000+文件被命名为彼此相似,但略有不同的多个文件夹,但它们涉及到相同的内容。 例如,在一个文件夹中,我将文件命名为“Jobs to do.doc”,并在另一个文件夹“Jobs to do(UK)(Europe).doc”中。脚本比较两个不同文件夹的内容,并基于最小相似度

这是在Windows 10上,不是Linux操作系统。

问题: 是否有脚本来比较每个文件夹的内容并根据最小相似性重命名它们?所以最终的结果是删除所有术语,并让每个文件夹(多个)中的每个文件都相同,但仍保留在回顾文件夹中? *基本上将多个文件夹内容与一个文件夹内容进行比较并重命名,以便每个文件夹中的每个文件命名相同?

例子:

D:/Folder1/Name_Of_File1.jpeg 
D:/Folder2/Name_Of_File1 (Europe).jpeg 
D:/Folder3/Name_of_File1_(Random).jpeg 

D:/folder1/another_file.doc 
D:/Folder2/another_file_(date_month_year).txt 
D:/Folder3/another_file(UK).XML 

我使用了不同的文件扩展名在希望有人在上面的例子中可以编写一个脚本来忽略文件扩展名。

我希望这是有道理的。因此,无论是删除括号中的内容并保持文件完整性的脚本,还是基于最小相似性在所有文件夹中重命名所有文件。

问题是它在每个文件夹中有超过1000个文件,所以想将它作为自动化作业运行。

在此先感谢。

+0

你能告诉我们你到目前为止所尝试过的吗? – treintje

+2

定义“相似性” –

+0

我认为我已经使它比需要更混乱,但我已经用完咖啡厅了。我的意思是将一个文件夹的内容与另一个文件夹进行比较并重命名,以便两个文件夹内容具有相同的名称但保留其文件扩展名 当我说上面的最小相似性时,根据另一个文件夹内容重命名一个文件夹内容,如果它的80%相似,则重命名它。所以我选择的选择文件夹,文件夹的所有内容都将被命名为相同。 –

回答

0

如果你想摆脱的东西总是在括号中,那么你可以写出这样 (.*?)([\s|_|]*\(.*\))

正则表达式的尝试是这样的

$folder = Get-ChildItem 'C:\TestFolder' 
$regex = '(.*?)([\s|_|]*\(.*\))' 
foreach ($file in $folder){ 
    if ($file.BaseName -match $regex){ 
     Rename-Item -Path $file.FullName -NewName "$($matches[1])$($file.extension)" -Verbose #-WhatIf 
    } 
} 

关于一致性,你可以使用相同的运行预检正则表达式

#change each filename if it matches regex and store only it's new basename 
$folder1 = get-childitem 'D:\T1' | foreach {if ($_.BaseName -match $regex){$matches[1]}else{$_.BaseName}} 
$folder2 = get-childitem 'D:\T2' | foreach {if ($_.BaseName -match $regex){$matches[1]}else{$_.BaseName}} 
#compare basenames in two folders - if all are the same nothing will be returned 
Compare-Object $folder1 $folder2 

也许你可以用这个想法来构建。

+0

我非常感谢一个解决方案,这是永远受欢迎的。上述请求比较和重命名文件夹的唯一原因是为了保持一致性,这样我知道所有文件夹内容(我指定的)具有相同的名称,除了文件扩展名。 您的powershell脚本通过删除括号中的任何内容,但我得到这个错误: 如果:执行操作“重命名文件”目标“项目:X:\ Test \ TestFile01.txt:X:\测试\ TestFile01.txt”。 –

+0

TestFile01.txt不应该给这个正则表达式匹配。奇。我没有这个文件名的错误。 –

+0

对不起更正。我错过了一点。 错误: 如果发生以下情况,请执行以下操作:对目标“项目:C:\ Test \ TestFile01(Europe).zip目标:C:\ Test \ TestFile01.zip”执行操作“重命名文件”。 我省略了括号内的区域,这是我想运行此脚本的主要原因,它删除括号中的任何内容(包括括号) –

相关问题