微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PowerShell - 将目录中的文件夹名称与文件名称进行比较

如何解决PowerShell - 将目录中的文件夹名称与文件名称进行比较

我正在寻找一种方法将目录中的所有文件夹与目录中的所有文件进行比较并报告匹配列表(文件的扩展名无关紧要) .

我有

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

解决方法

如果您想要的只是一个 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
,

正如奥拉夫所建议的:

$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 '=>'}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。