仅根据名称从给定目录路径中获取特定文件

时间:2018-09-06 08:58:21

标签: powershell

到目前为止我尝试过的:

foreach($file in Get-ChildItem "D:\sdf\fgh\ls\" -filter ABC.json,DEF.json)

我得到的是什么

The term 'DEF.json' is not recognized as the name of a cmdlet, function, script file, or operable 
program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At C:\Users\M1046511\Documents\collection.ps1:1 char:96
+ ... \sdf\fgh\ls\" -filter ABC.json|DEF.json){
+                                                         ~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (DEF.json.json:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

我的期望: 应该在文件夹路径中搜索给定的文件。 我不想提供任何模式来搜索文件。直接想给出文件名。

1 个答案:

答案 0 :(得分:1)

Get-ChildItem的-Filter参数仅支持单个字符串/条件。 在这种情况下,您可以使用-Include参数。此参数确实可以处理数组,但是要使其正常工作,您必须还必须添加-Recurse参数。 像这样:

Get-ChildItem -Path "D:\sdf\fgh\ls\" -Include "ABC.json","DEF.json" -Recurse

另一种可能性是首先过滤所有.json文件,然后使用Where-Object来获取所需的确切两个文件。

Get-ChildItem -Path "D:\sdf\fgh\ls\" -Filter "*.json" -Recurse | Where-Object { $_.Name -match '^ABC|DEF' }

希望这会有所帮助