Powershell脚本,用于比较两个目录并排除某些文件

时间:2013-07-10 08:42:20

标签: powershell

简短的说法是我有两个外置硬盘(标有T:和V :)以及我的主SSD;我使用T:严格用于媒体存储,而V:应该只是它的镜像备份。一个转折点是我稍微修改T上的某些文件名:在观看视频之后通过在其前面放置一个哈希(以表示列表中的哪个视频我最多)。示例:1。飞行员,#2。显示,3。游戏......观看ep 2,它变为:1。Pilot,2。Show,#3。游戏。

我现在有非常弱的无用代码,对不起。我是Powershell的新手,我不希望任何人浪费他们的夏日做这一切,但有什么建议让我去?真的,我专注于任何类型的排除/忽略提供99%可比的文件;即#2。显示vs 2.显示(我知道左/右功能的计数,但似乎无法让它按我想要的方式工作)。

感谢和抱歉这个混乱的问题。

代码atm:gci -recurse -path C:\V\TV, C:\T | Where-Object {$_.name -like "*.txt*"} | Group -noelement | where {$_.count -eq 1} | Sort-Object -Property Name

`计数名称


1 #Goodbye - Copy (20).txt 
1 #Goodbye - Copy (6).txt  
1 #Hello - Copy (21).txt   
1 #Hello - Copy (7).txt    
1 Goodbye - Copy (20).txt  
1 Goodbye - Copy (6).txt   
1 Hello - Copy (21).txt    
1 Hello - Copy (7).txt`

1 个答案:

答案 0 :(得分:1)

如果您只想知道两者之间的区别,可以使用以下脚本:

$T = Get-ChildItem T: -Recurse
$V = Get-ChildItem V: -Recurse
Compare-Object $T $V

或其紧凑形式:

compare (ls T: -Recurse) (ls V: -Recurse)

请注意,它只会比较在T:和V下找到的每个文件: 您可以通过Get-ChildItem cmdlet中的某些过滤来缩小比较范围。

修改

从评论更新,以下是仅列出唯一值的脚本,使用#

的TrimStart方法从起始字符[String]中删除文件名
Get-ChildItem -Recurse -Path T:,V: | %{ $_.Name.TrimStart('#') } | Sort-Object -Unique