取决于多个数组匹配的powershell消息

时间:2018-11-07 15:55:13

标签: powershell

我正在尝试开发一个脚本来移动(某些)到达目录的文件并记录结果。我的复制部分是正确的(我说对了-它可以工作-但实际上可能是绝望的错误!),但是记录没有。

这是命令行:

  

PCopy.ps1-载波ECM-方向IN-过滤器DEL,MAN

第一个参数正确确定目录,第二个参数选择子目录。第三个参数是有趣的地方,因为它是一个数组。

所以我想出了几个嵌套循环:

Foreach($item in $filter){
    foreach($File in $filenames){
        If($File -match $Item){ 
    Write-Log "$File matches filter" -Path $LogFile
    Copy-Item -Path $Sourcefile\$direction\$File -Destination $Destination 

很好。但是,因为它遍历每个过滤器和文件,所以与一个过滤器匹配的文件不一定与下一个过滤器匹配。

我试图复制所需文件,并仅记录不需要的文件的详细信息。

所以说有3个文件到达

Man.txt
Del.txt
Ava.txt

我希望日志文件显示前两个与过滤器匹配-并将它们复制到目标位置,但第三个与任何过滤器都不匹配,因此将其记录下来,而不进行复制。

我知道我的编写方式,因为每个文件都与过滤器进行比较-我会收到2条复制的消息和4条不匹配的消息-这不是我想要的。

我需要一种更优雅的方式,例如:

Man.txt matches the filter MAN and was copied to $destination
Del.txt matches the filter DEL and was copied to $destination
Ava.txt did not match any filter so is being logged only

我唯一想到的就是尝试建立答案数组,并检查(并删除)重复项-但这似乎不是很直观-任何人都可以帮忙吗?

我是Powershell的新手,如果我错过了明显的流血事件,请原谅我!

1 个答案:

答案 0 :(得分:0)

您可以使用正则表达式OR以'|'测试'this OR that'符号。像这样的东西

$Filter = 'One', 'Two'
$RegexFilter = $Filter -join '|'

'This contains One, but not the other filter item.' -match $RegexFilter
'One and Two are here.' -match $RegexFilter
'This line has only Two.' -match $RegexFilter
'No matching items are in this line.' -match $RegexFilter

输出...

True
True
True
False