在这种情况下,FolderA中有一堆文件(下面列出),我们需要将每个文件复制到FolderB中的语言文件夹中。
文件夹文件的示例列表:
FolderB包含以下文件夹:
目标是将FolderA中包含[cs-CZ]的所有文件复制到FolderB \ cs-CZ文件夹等中。
在实际情况下,FolderA中有数十个/数百个文件,FolderB中有60种语言。我会更新脚本中的语言列表。
感谢提示!
答案 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)
}