Powershell 是否可以使用Get-ChildItem-Name进行筛选?
在我最近的回答中,我发现了一个有趣的答案,这个答案本不应该有效,但仍然有效。问题是如何通过名称和Powershell 是否可以使用Get-ChildItem-Name进行筛选?,powershell,get-childitem,Powershell,Get Childitem,在我最近的回答中,我发现了一个有趣的答案,这个答案本不应该有效,但仍然有效。问题是如何通过名称和cd递归查找特定文件夹 结果是: Get ChildItem-Path.\-Name Folder-Recurse-Depth 10 根据的文档,-Name参数应该是SwitchParameter类型,并且只负责返回名称(System.String),而不是System.Object 这个解决方案怎么可能仍然有效 MCVE: #cd C:\SO\56628221 mkdir测试,测试1,测试2,测
cd
递归查找特定文件夹
结果是:
Get ChildItem-Path.\-Name Folder-Recurse-Depth 10
根据的文档,-Name
参数应该是SwitchParameter
类型,并且只负责返回名称(System.String
),而不是System.Object
这个解决方案怎么可能仍然有效
MCVE:
#cd C:\SO\56628221
mkdir测试,测试1,测试2,测试3
mkdir.\test2\文件夹
Get ChildItem-Path.\-Name Folder-Recurse-Depth 10
电流输出:
test2\folder
预期产出:
Get ChildItem:找不到接受参数“Folder”的位置参数。
我试过什么?
-Path
是唯一的位置参数。显然是:位置:Named
Get ChildItem-Path.\Folder-Name-Recurse-Depth 10
它仍在工作,因此这清楚地表明我传递给cmdlet的不是-Name
的值
-Path
。我试图明确地做到这一点:[string[]]a='.\','Folder'
$a.GetType()
获取ChildItem-Path$a-Name-Recurse-Depth 10
#输出:
PS C:\SO\56628221>$a.GetType()
IsPublic IsSerial名称基类型
-------- -------- ---- --------
True字符串[]System.Array
PS C:\SO\56628221>获取ChildItem-Path$a-Name-Recurse-Depth 10
测试
测试1
测试2
测试3
test2\文件夹
Get-ChildItem:找不到路径“C:\SO\56628221\Folder”,因为它不存在。
第1行字符:1
+获取ChildItem-Path$a-Name-Recurse-Depth 10
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+CategoryInfo:ObjectNotFound:(C:\SO\56628221\Folder:String)[Get ChildItem],ItemNotFoundException
+FullyQualifiedErrorId:PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
tl;博士:
显然,当前版本的Get ChildItem
文档中有一条不正确的信息,说明-Filter
不再处于位置
上述情况已不复存在,已被修正
长答覆: 事实上,值“Folder”正在传递给
-Filter
参数。即使,-Filter
是一个位置参数。错误的是,在PowerShell v6+中引入的更改仍然是正确的
您运行的cmdlet:
Get ChildItem-Path.\-Name Folder-Recurse-Depth 10
实际上:
Get ChildItem-Path.“\”-Name-Filter“Folder”-递归-深度10
即使Get ChildItem
中的-Filter
参数,在这种情况下,它工作正常,并且过滤器仅应用于显示名为“Folder”的项目。由于该调用未指定-File
或-Directory
,如果您运行:
#创建名为“文件夹”的新文件
新项目文件夹
然后再次运行cmdlet,它将返回创建的文件和文件夹:
PS C:\SO\56628221>Get ChildItem-Path.\-Name Folder-Recurse-Depth 10
文件夹
test2\文件夹
如果明确使用-Filter
,则输出完全相同:
PS C:\SO\56628221>Get ChildItem-Path.\-Name-Filter Folder-Recurse-Depth 10
文件夹
test2\文件夹
我打开了公关部,说:谢谢你的解释。有时,我想看到事情碰巧发生是很有趣的:)@Aguestwho'scalledRedd不客气!如果你认为有价值的话,请随意投票。事实上,这是你应得的;)