首页 > 解决方案 > Powershell 复制匹配项

问题描述

我想制作一个脚本,其中有一个带有编号文件夹的备份文件夹,并且有编号的 zip 文件,对于这些 zip 文件,找到编号的文件夹并将其复制到那里并展开它。

$R = "136" ; "287"
gci "\\rossfsscan\scanning\ejbackup\" | where-object {$_.name -match "$R"}

但我不知道如何将文件移动到匹配的目录。

标签: powershell

解决方案


不要使用分号 ( ;),因为它表示Powershell 中的语句终止。所以,如果你只运行变量$R,你会得到的唯一输出是“136”。您当前仅将字符串“136”保存$R到主机并向主机显示“287”。而是使用管道符号 ( |) 作为匹配的正则表达式分隔符。

$R = "136|287"
gci "\\rossfsscan\scanning\ejbackup\" -Recurse | Where-Object {$_.Name -match $R}

现在,在过滤时,使用管道是可以的,但由于其工作方式的性质,它往往会变慢。最佳做法是尽可能向左过滤:

gci "\\rossfsscan\scanning\ejbackup\" -Recurse -Include '*136*','*287*'

要复制过滤的项目,请将其通过管道传输到Copy-Item.

gci "\\rossfsscan\scanning\ejbackup\" -Recurse -Include '*136*','*287*' | Copy-Item -Destination "C:\My\destination\path"

推荐阅读