我想使用PowerShell來計算重複的文件。我的文件有一個特殊的分隔符('#'),我只能比較分隔符之前的部分。使用PowerShell計數重複
Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 23.09.2016 09:44 0 AnotherDuplicateOffer_#1265473v1.DOCX -a---- 23.09.2016 09:44 0 AnotherDuplicateOffer_#89798798546v1.DOCX -a---- 23.09.2016 09:44 0 AnotherDuplicateOffer_#98769876v1.DOCX -a---- 23.09.2016 09:44 0 DuplicateOffer_#1254798v1.DOCX -a---- 23.09.2016 09:44 0 DuplicateOffer_#34987094587v1.DOCX -a---- 23.09.2016 09:44 0 DuplicateOffer_#4986598v1.DOCX -a---- 23.09.2016 09:44 0 DuplicateOffer_#567809v1.DOCX -a---- 23.09.2016 09:44 0 WordFilesAlthoug_#89798798546v1.DOCX
分隔符後的部分是一個唯一的ID,至少我想通過刪除這個ID來重命名這些文件。所以新文件名應該是'string(x).docx','x'應該是重複項的計數器。
我卡通過計算重複:
foreach ($file in (Get-ChildItem -Path $path -Recurse | Where {!$_.PSIsContainer})) {
$file.Name
$file.Name.IndexOf("#")
$file.Name.Substring(0, ($file.Name.IndexOf("#")))
(dir *.* | group -Property Name | Where {($_.Name.Substring(0,($_.Name.IndexOf("#")))) -match ($_.Name.Substring(0,($_.Name.IndexOf("#"))))}).Count
}
我得到的「#」右手食指與$file.Name.IndexOf("#")
並且還$file.Name.Substring(0,($file.Name.IndexOf("#")))
字符串是正確的。但是當我在管道中使用相同的時候,由於第二部分,我在Substring
中遇到了異常 - 它必須大於0並且它看起來是0或更小。
爲了更好地理解:$_
與$file
相同 - 它是管道中的實際指針。
謝謝你的工作。無論如何,我讓我的Probelm自己解決了。見上面的更新 – ludwigschuster