到目前为止我尝试过的:
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
我的期望: 应该在文件夹路径中搜索给定的文件。 我不想提供任何模式来搜索文件。直接想给出文件名。
答案 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' }
希望这会有所帮助