【问题标题】:Powershell script for comparing two directories and excluding certain files用于比较两个目录并排除某些文件的 Powershell 脚本
【发布时间】:2013-07-08 02:42:19
【问题描述】:

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

我现在的代码真的很弱,没用,对不起。我对 Powershell 还很陌生,我不希望任何人都浪费他们的暑假来做这一切,但是有什么建议可以让我继续前进吗?真的,我专注于对 99% 可比文件的任何类型的排除/忽略规定;即#2。 Show vs 2. Show(我知道左/右函数的计数,但似乎无法让它按我想要的方式工作)。

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

自动取款机: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`

【问题讨论】:

  • 代码的哪一部分没有按预期工作?
  • 呸,我的帖子格式错误……等等

标签: powershell


【解决方案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 中的一些过滤来缩小比较范围。

编辑

从评论更新,以下是仅列出唯一值的脚本,从起始字符 # 中剥离文件名,使用 [String] 的 TrimStart 方法

Get-ChildItem -Recurse -Path T:,V: | %{ $_.Name.TrimStart('#') } | Sort-Object -Unique

【讨论】:

  • 它并没有坏到我找不到合适的过滤器。我已经设置了包含一堆 txt 文件的虚拟 T 和 V 文件。这是我的代码及其输出,我想要排除所有这些文件,因为它们都是“相同”文件,只是这样散列。gci -recurse -path C:\V\TV, C:\T | Where-Object {$_.name -like "*.txt*"} | Group -noelement | where {$_.count -eq 1} | Sort-Object -Property Name1 #Goodbye - Copy (20).txt 1 #Goodbye - Copy (6).txt 1 #Hello - Copy (21).txt 1 #Hello - Copy (7).txt 1 Goodbye - Copy (6).txt 1 Hello - Copy (21).txt 1 Hello - Copy (7).txt
  • @user2567649 把它放在你的问题中。在那里你可以格式化代码。
  • 抱歉,在这个论坛上完全不适应 frickin' 格式!如果你能弄清楚代码,以“-PropertyName”结尾,输出是一个格式化列表,你可以在其中看到那些几乎重复的内容。
  • @wannabeprogrammer - 谢谢,但这不是我想要的。我使用了 compare-object,它不符合任何条件。如果我可以使用某种命令构建 OP 中的代码,以排除列出的那些文件,如果它们基本上是重复的,比如一个不同的字符(左侧的哈希)......
  • 在最简单的形式中,如果内容有两行最后 10 个字符(例如)相同,则在脚本中产生异常的 cmdlet 是什么?因此,如果您有 1. 测试视频文件和 #1。测试视频文件,该规定将排除任一项目出现在输出中,因为最后 10 个字符完全相同。与$str有关吗?感觉好像我以前学过这个,但我却逃脱了!
猜你喜欢
  • 1970-01-01
  • 2012-10-01
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2021-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多