我想制作一个动态函数,在输入的文件中搜索请求的$ErrorCode,并最终将有错误的文件复制到另一个文件夹。
现在,我的代码只获取一个文件,并返回$Error_code的查找位置。我想搜索多个文件,并返回具有$ErrorCode的文件的名称。
function SearchError{
Param (
[Parameter (Mandatory=$true)] [STRING] $SourcePath,
[Parameter (Mandatory=$true)] [STRING] $SourceFile,
[Parameter (Mandatory=$true)] [STRING] $ErrorCode,
[Parameter (Mandatory=$true)] [STRING] $FileType
# [Parameter (Mandatory=$true)] [STRING] $DestPath
)
$TargetPath = "$($SourcePath)$($SourceFile)"
#Return $TargetPath
$DestinationPath = "$($DestPath)"
#Return $DestinationPath
#foreach($error in $TargetPath) {
Get-ChildItem $TargetPath | Select-String -pattern $ErrorCode
}
SearchError
-
Select-String
的输出对象(类型为[Microsoft.PowerShell.Commands.MatchInfo]
(具有反映输入文件路径的.Path
属性。 -
将
-List
开关添加到Select-String
会使其在文件中的第一个匹配项之后停止搜索,因此对于每个至少找到1个匹配项的文件,您将获得恰好1个输出对象。
因此,以下仅输出其中找到至少1个匹配的输入文件的路径:
Get-ChildItem $TargetPath |
Select-String -List -Pattern $ErrorCode | ForEach-Object Path
注意:-Pattern
支持正则表达式模式的数组,因此如果将$ErrorCode
参数定义为[string[]]
,则具有任何一个模式的文件都将匹配;使用-SimpleMatch
而不是-Pattern
按文字子字符串进行搜索。
Re:
最终将出现错误的文件复制到另一个文件夹
只需将| Copy-Item -Destination $DestPath
附加到上述命令即可。
回复:
我想搜索多个文件
根据需要,您可以将$SourcePath
和$SourceFile
参数设置为数组值([string[]]
(和/或将通配符表达式作为参数传递。