【问题标题】:PowerShell - Compare Folder Names in Directory to File NamesPowerShell - 将目录中的文件夹名称与文件名进行比较
【发布时间】: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


【解决方案1】:

如果您想要的只是一个 BaseName 等于源目录中文件夹名称之一的文件名列表,为什么不简单地这样做:

$sourceDirectory = 'C:\Users'
# get an array of foldernames
$folderNames = (Get-ChildItem -Path $sourceDirectory -Directory).Name
# output a list of filenames with matching BaseNames
(Get-ChildItem -Path $sourceDirectory -File | Where-Object {$folderNames -contains $_.BaseName}).FullName

【讨论】:

  • 完美运行!感谢你的回答。希望这可以帮助其他一些人进行磁盘清理。
【解决方案2】:

正如奥拉夫所建议的:

$path1 = "C:\Test\powershell\folder1"
$path2 = "C:\Test\powershell\folder2"
$Folder1 = Get-ChildItem -Recurse -path $path1
$Folder2 = Get-ChildItem -Recurse -path $path2

Compare-Object $Folder1 $Folder2 -Property Name,Length | Where-Object {$_.sideIndicator -eq '=>'}

【讨论】:

  • 我接受了这个并试图让它适合我想要做的事情。如果可以的话,你能告诉我我在编辑中做错了什么吗? (我想在同一目录中查找与文件夹名称匹配的文件)。
  • 我写的是比较两个文件夹,可能不适用于你的场景。
猜你喜欢
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多