【发布时间】:2021-06-11 06:57:53
【问题描述】:
我正在寻找一种方法来将目录中的所有文件夹与目录中的 所有 文件进行比较并报告匹配列表(文件扩展名无关紧要) .
我有:
Get-ChildItem $Path -Directory | ForEach-Object {}
-或-
(Get-ChildItem $Path -File).BaseName | ForEach-Object {}
我找不到一种简单的方法,我觉得我缺少只获取不包含路径的文件夹/目录名称。我认为可能有类似的东西之一:
$file.BaseName $file.FullName -leaf
即便如此,我还是很困惑如何检查名称是否匹配?
另外,我把星号放在周围是因为我认为有人可能知道更有效的方法,比如如果文件夹名称的第一个字母与文件名的第一个字母不匹配,则不需要比较它们进一步。
任何帮助将不胜感激!
使用下面的答案,我觉得这更接近我想要的要求,但它似乎仍然没有工作。
$path1 = "C:\Users"
$Folders = Get-ChildItem -path $path1 -Directory
$Files = (Join-Path (Get-ChildItem -path $path1 -File).DirectoryName (Get-ChildItem -path $path1 -File).BaseName)
Compare-Object $Folders $Files -Property Name -ExcludeDifferent
【问题讨论】:
-
您可以查看 cmdlet Compare-Object。它是用来比较对象的。 ;-)
-
要仅获取路径的最后一个文件夹,您可以使用Split-Path。
-
这与您所说的根目录相同吗? "list of matches" 是什么意思?部分匹配或确切的文件基本名称等于文件夹名称?
-
是的,相同的根目录。确切的文件基本名称等于文件夹名称。基本上我正在寻找已解压缩到文件夹的文件。 “C:\Users\banana”匹配“C:\Users\banana.rar”
-
我们还没有收到您的来信.. 任何给定的答案是否解决了您的问题?如果是这样,请通过单击左侧的 ✓ 图标来考虑accepting。这将帮助有类似问题的其他人更轻松地找到它,并有助于激励其他人回答您将来可能遇到的任何问题。
标签: performance powershell sorting compare