如何使用powershell字符串数组

时间:2016-01-06 16:14:43

标签: windows powershell

我想在特定的源文件夹中搜索字符串。 如果我找到具有该名称的.xml文件,我想将该文件复制到特定的目标目录中。 这就是我到目前为止所做的:

$SourceDirectory =   "D:\MessageQueue_Backup\DPGIN_Backup\ETIMS"
$DestinationDirectory = "C:\Destination"

$orderNumberArray = "1F-16CG-2-94JG-60-2.R6C3.20864",
"1F-16CG-2-28JG-10-2.R3C4.21488",
"1F-16CJ-2-75JG-00-21.R4C2.21487",
"1F-16CG-2-70JG-10-41.R5C3.21586",
"1F-16CG-2-32JG-90-1.R2C2.22733",
"1F-16CG-2-33JG-00-1.R5C4.23044",
"1F-16CG-2-80JG-10-11.R5C4.22660",
"1F-16CG-2-94JG-10-2.R7C3.23046",
"1F-16CG-2-94JG-60-6.R10C7.23031",
"1F-16CJ-2-24JG-30-1.R3C1.23036",
"1F-16CJ-2-28JG-40-1.R4C3.22737",
"1F-16CJ-2-32JG-40-1.R7C3.22728",
"1F-16CJ-2-32JG-90-1.R2C2.22734",
"1F-16CJ-6-11.R14C5.24295",
"1F-16CJ-2-34JG-50-1.R6C7.2,5266"

foreach ($element in $orderNumberArray) 
{

    If (Get-ChildItem $_.FullName | Select-String -Pattern $element) 
    {
       Copy-Item $file.FullName -Destination $DestinationDirectory
    }

}

我的问题是,我不知道如何搜索SourceDirectory :( 顺便说一下,SourceFolder中只有xml文件

3 个答案:

答案 0 :(得分:1)

这可能有效

$SourceDirectory = 'D:\MessageQueue_Backup\DPGIN_Backup\ETIMS\*'
$DestinationDirectory = "C:\Destination"

$orderNumberArray = @(
    "*1F-16CG-2-94JG-60-2.R6C3.20864*",
    "*1F-16CG-2-28JG-10-2.R3C4.21488*",
    "*1F-16CJ-2-75JG-00-21.R4C2.21487*",
    "*1F-16CG-2-70JG-10-41.R5C3.21586*",
    "*1F-16CG-2-32JG-90-1.R2C2.22733*",
    "*1F-16CG-2-33JG-00-1.R5C4.23044*",
    "*1F-16CG-2-80JG-10-11.R5C4.22660*",
    "*1F-16CG-2-94JG-10-2.R7C3.23046*",
    "*1F-16CG-2-94JG-60-6.R10C7.23031*",
    "*1F-16CJ-2-24JG-30-1.R3C1.23036*",
    "*1F-16CJ-2-28JG-40-1.R4C3.22737*",
    "*1F-16CJ-2-32JG-40-1.R7C3.22728*",
    "*1F-16CJ-2-32JG-90-1.R2C2.22734*",
    "*1F-16CJ-6-11.R14C5.24295*",
    "*1F-16CJ-2-34JG-50-1.R6C7.2,5266*"
)

dir $SourceDirectory -Include $orderNumberArray | % {copy $_.fullname $destinationdirectory}

答案 1 :(得分:1)

尝试这样的事情

$Include = @('1F-16CG-2', '1F-16CG-2')
gci -Path D:\MessageQueue_Backup\DPGIN_Backup\ETIMS | ForEach-Object ($_) {
    for($i = 0; $i -lt $Include.Count; $i++){
        if($_.Name.StartsWith($Include[$i])){
            Write-Warning $_.Name
        }
    }
}

答案 2 :(得分:1)

这样的事情应该有效:

$sourceDirectory      = "D:\MessageQueue_Backup\DPGIN_Backup\ETIMS"
$destinationDirectory = "C:\Destination"

$orderNumbers = "1F-16CG-2-94JG-60-2.R6C3.20864",
                "1F-16CG-2-28JG-10-2.R3C4.21488",
                "1F-16CJ-2-75JG-00-21.R4C2.21487",
                "1F-16CG-2-70JG-10-41.R5C3.21586",
                "1F-16CG-2-32JG-90-1.R2C2.22733",
                "1F-16CG-2-33JG-00-1.R5C4.23044",
                "1F-16CG-2-80JG-10-11.R5C4.22660",
                "1F-16CG-2-94JG-10-2.R7C3.23046",
                "1F-16CG-2-94JG-60-6.R10C7.23031",
                "1F-16CJ-2-24JG-30-1.R3C1.23036",
                "1F-16CJ-2-28JG-40-1.R4C3.22737",
                "1F-16CJ-2-32JG-40-1.R7C3.22728",
                "1F-16CJ-2-32JG-90-1.R2C2.22734",
                "1F-16CJ-6-11.R14C5.24295",
                "1F-16CJ-2-34JG-50-1.R6C7.2,5266"

Get-ChildItem $sourceDirectory -Filter *.xml | Where-Object {
  $basename = $_.BaseName
  $orderNumbers | Where-Object { $basename -like "*$_" }
} | Copy-Item -Destination $destinationDirectory

过滤器检查每个文件的基本名称(没有扩展名的文件名)是否以任何订单号(-like "*$_")结尾。