删除文件名的重复部分?[关闭]


-1

我们经常下载文件,这些文件有重复的文件名部分。这是一个问题,因为我们必须保存它们的驱动器具有256个字符的路径限制,并且它们被保存了很多子文件夹。目前我手动删除相同文件名的重复部分,根据附加图像,删除的部分以红色突出显示: 在此输入图像描述

是否有批处理文件/更快的方式在文件名中查找副本并将其删除?谢谢,拉斯。


2
因此,如果您了解文件资源管理器的256个字符限制,那么您应该更改下载位置,因此限制不是问题。
Ramhound 2017年

2
我会说,脚本(或程序)执行此操作会相当复杂。想象一下this_is_a_long_name_which_is_an_example.ext- 如果你“重复删除”这个名字,它很可能就会变成this_is_a_long_name_whichn_example.ext,正如_is_a两次提到的那样。因此,如果您没有所有新文件名共享的确切模式(例如file_name_-_file-name - file name.ext),则几乎不可能以自动方式执行此操作。
flolilo于

2
这实际上并不那么难。我会用powershell。似乎每个副本都由一个_字符分隔。因此,PowerShell可以轻松拆分文件名,_然后删除生成的数组中的任何重复项。最后,它可以使用已清理的数组来构建一个没有重复的新文件名。
Appleoddity 2017年

(2/2),如果你有这样一个模式,使用PowerShell中,你可以尝试.Split()BaseName.Replace()字分隔符(空格,点,下划线,连字符,...),所以他们都是一样的,然后Sort-Object -Unique对它们进行比较,那么.Join()子串再次回来并将它们用作新BaseNameRename-Item
flolilo于

嗨,Ramhound,我无法做到这一点,我们公司的工作机会不受我的控制。Flolilolilo,谢谢你,我认为这不容易,最后Appleoddity,我是一个非常基本的用户,并且不知道该怎么做,你有时间告诉我吗?谢谢所有:)
Russell_s_smith

Answers:


1

免责声明:此PowerShell代码尚未经过充分测试,无法知道它可以在所有具有各种可能奇怪的文件名/格式的环境中正常运行。但是,它确实适用于您提供的示例。使用风险或 Rename-Item -WhatIf-switch 一起使用(因此它只会显示它会做什么而不会实际操作文件名)。


示例文件夹:

CDS 202 - GLAZING PACKERS_CDS 202 - Glazing Packers_CDS 202 - Glazing Packers.docx
CDS 202 - GLAZING PACKERS_CDS 202 - Glazing Packers_CDS 202 - Glazing Packers.pdf
CDS 202 - GLAZING PACKERS_PX-INA-PD-RP-X-XX-XX-0026.pdf

以下是如何完成任务的示例:

# Remove all duplicates in filenames in current folder: (Case Sensitive)
Get-ChildItem -Path .\* -File | ForEach-Object {
    Rename-Item $_ -NewName ((($_.Basename.Split("_") | Select-Object -Unique) -Join "_") + $($_.Extension))
}

# Results:
# CDS 202 - GLAZING PACKERS_CDS 202 - Glazing Packers.docx
# CDS 202 - GLAZING PACKERS_CDS 202 - Glazing Packers.pdf
# CDS 202 - GLAZING PACKERS_PX-INA-PD-RP-X-XX-XX-0026.pdf
# Remove all duplicates in filenames in current folder: (Case Insensitive - Drawback: filenames are converted to upper case)
Get-ChildItem -Path .\* -File | ForEach-Object {
    Rename-Item $_ -NewName ((($_.Basename.Split("_").ToUpper() | Select-Object -Unique) -Join "_") + $($_.Extension))
}

# Results:
# CDS 202 - GLAZING PACKERS.docx
# CDS 202 - GLAZING PACKERS.pdf
# CDS 202 - GLAZING PACKERS_PX-INA-PD-RP-X-XX-XX-0026.pdf
# Remove all duplicates in filenames in current folder and all subfolders: (Case Sensitive)
Get-ChildItem -Path .\* -File -Recurse | ForEach-Object {
    Rename-Item $_ -NewName ((($_.Basename.Split("_") | Select-Object -Unique) -Join "_") + $($_.Extension))
}

# Results:
# CDS 202 - GLAZING PACKERS_CDS 202 - Glazing Packers.docx
# CDS 202 - GLAZING PACKERS_CDS 202 - Glazing Packers.pdf
# CDS 202 - GLAZING PACKERS_PX-INA-PD-RP-X-XX-XX-0026.pdf
# Remove all duplicates in filenames in current folder and all subfolders: (Case Insensitive - Drawback: all filenames are converted to upper case)
Get-ChildItem -Path .\* -File -Recurse | ForEach-Object {
    Rename-Item $_ -NewName ((($_.Basename.Split("_").ToUpper() | Select-Object -Unique) -Join "_") + $($_.Extension))
}

# Results:
# CDS 202 - GLAZING PACKERS.docx
# CDS 202 - GLAZING PACKERS.pdf
# CDS 202 - GLAZING PACKERS_PX-INA-PD-RP-X-XX-XX-0026.pdf

请享用!


非常感谢Appleoddity,非常适合我想要实现的目标!最感谢。
Russell_s_smith

不是我直接有问题,但你为什么改变结果呢?我从个人测试(PowerShell 5.1)中获取它们,所以它们应该是准确的 - 或者我犯了错误?
flolilo,

@flolilolilo我感谢您的更新。但是我回来对我的回答做了一点改动,因为我复制并粘贴了错误。这一变化影响了每个结果的输出。它使得它看起来命令不能正常工作,但实际上确实如此,我已经纠正了帖子中的所有内容以便匹配。
Appleoddity

@Appleoddity啊 - 由于某种原因,我没有注意到代码的变化,只是结果的变化 - 对不起打扰!
flolilo,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.