PS脚本可将特定文件复制到特定文件夹中

时间:2018-07-19 06:54:11

标签: file powershell copy directory

在这种情况下,FolderA中有一堆文件(下面列出),我们需要将每个文件复制到FolderB中的语言文件夹中。

文件夹文件的示例列表:

  • Product_redesign_v2_product_overview_ [cs-CZ] .txt
  • Product_redesign_v2_product_overview_ [cs-CZ] .xml
  • Product_redesign_v2_product_overview_ [da-DK] .txt
  • Product_redesign_v2_product_overview_ [da-DK] .xml
  • Product_redesign_v2_product_overview_ [de-CH] .txt
  • Product_redesign_v2_product_overview_ [de-CH] .xml

FolderB包含以下文件夹:

  • cs-CZ
  • da-DK
  • de-CH

目标是将FolderA中包含[cs-CZ]的所有文件复制到FolderB \ cs-CZ文件夹等中。

在实际情况下,FolderA中有数十个/数百个文件,FolderB中有60种语言。我会更新脚本中的语言列表。

感谢提示!

2 个答案:

答案 0 :(得分:1)

使用正则表达式在BaseName的末尾获取语言。

## Q:\Test\2018\07\19\SO_51416162.ps1
$FolderA = 'X:\Path\to\FolderA'
$FolderB = 'Y:\Path\to\FolderB'

Get-ChildItem -Path $FolderA |
  Where-Object Basename -match '\[([^\]]+)\]$' | ForEach-Object {
    $Destination  = Join-Path $FolderB $Matches[1]
    IF (Test-Path $Destination){
      $_ | Copy-Item -Destination $Destination -force
    } else {
      "Folder {0} doesn't exist" -f $Destination
    }
  }

运行脚本之前的示例文件夹:

> tree /F
Auflistung der Ordnerpfade für Volume RamDisk
├───FolderA
│       Product_redesign_v2_product_overview_[cs-CZ].txt
│       Product_redesign_v2_product_overview_[cs-CZ].xml
│       Product_redesign_v2_product_overview_[da-DK].txt
│       Product_redesign_v2_product_overview_[da-DK].xml
│       Product_redesign_v2_product_overview_[de-CH].txt
│       Product_redesign_v2_product_overview_[de-CH].xml
│
└───FolderB
    ├───cs-CZ
    ├───da-DK
    └───de-CH

运行脚本后的示例文件夹:

> tree /F
Auflistung der Ordnerpfade für Volume RamDisk
├───FolderA
│       Product_redesign_v2_product_overview_[cs-CZ].txt
│       Product_redesign_v2_product_overview_[cs-CZ].xml
│       Product_redesign_v2_product_overview_[da-DK].txt
│       Product_redesign_v2_product_overview_[da-DK].xml
│       Product_redesign_v2_product_overview_[de-CH].txt
│       Product_redesign_v2_product_overview_[de-CH].xml
│
└───FolderB
    ├───cs-CZ
    │       Product_redesign_v2_product_overview_[cs-CZ].txt
    │       Product_redesign_v2_product_overview_[cs-CZ].xml
    │
    ├───da-DK
    │       Product_redesign_v2_product_overview_[da-DK].txt
    │       Product_redesign_v2_product_overview_[da-DK].xml
    │
    └───de-CH
            Product_redesign_v2_product_overview_[de-CH].txt
            Product_redesign_v2_product_overview_[de-CH].xml

答案 1 :(得分:0)

我的主张:

Get-ChildItem "C:\FolderA" -file -Filter "*[*].*" | %{

#Create directory if dont exists
$NewPath="C:\FolderB\{0}" -f   $_.BaseName.split(@("[", "]"))[1]
New-Item -ItemType Directory -Path $NewPath -Force | Out-Null

#For escape bracket or other bad caracters
$src = [Management.Automation.WildcardPattern]::Escape($_.FullName)

Copy-Item -Path $src -Destination ("{0}\{1}" -f $NewPath, $_.Name)
}