2016-01-06 70 views
1

我想搜索特定源文件夹中的字符串。 如果我找到具有该名称的.xml文件,我想将该文件复制到特定的目标目录中。 这是我到目前为止有:如何在特定文件夹中使用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

+0

“搜索”是什么意思?您是否正在寻找具有其*名称*或其内容*中的订单号码之一的文件? –

+0

我需要找到并复制所有名称以数组中提供的字符串结尾的XML文件 – Angelina

回答

1

所以这样mething应该工作:

$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 "*$_")的结束。

1

只有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*" 
) 

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

这不工作:( – Angelina

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 
     } 
    } 
} 
相关问题