0

我有一个文件夹source。它有以下文件:

image_00000.jpg
...
...
image_08000.jpg

还有一些在末尾附加了否定词的子文件夹:

我的目标是复制特定文件,例如从image_00000.jpg 到 image_00250.jpg集之外的所有文件。此外,我还需要复制一些在末尾附加了否定词的子文件夹。

我写了以下脚本:

cls

$source = "All_flowers_images_negatives"
$destination = "Passion_Flower_Negative_Images_temp" 
<#
foreach ($i in Get-ChildItem -Path $source -Recurse)
{
    if ($i.Name -match "image_(?!(000\d\d|001\d\d|002[0-4]\d|0025[0-1]))\d{5}\.jpg")
    {
        Copy-Item -Path $i.FullName -Destination $i.FullName.Replace($source,$destination).Trim($i.Name)
    }
}
#>
foreach ($i in Get-ChildItem -Path $source -Recurse)
{
    if ($i.Name -match "Negatives$")
    {
        Copy-Item -Path $i.FullName -Destination $i.FullName.Replace($source,$destination).Trim($i.Name)
    }
}

选择性文件复制有效(这就是我将其注释掉的原因)但第二个命令仅复制文件夹结构而不复制这些子文件夹中的任何文件。我应该做出哪些改变?

EDIT1:代码已被编辑,问题仍然存在。
EDIT2:它适用copy-item -recurse并且我的目标已经实现,但我仍然得到,

Copy-Item : The given path's format is not supported.
At F:\_102flowers-500X500\copy_positives_Passion_Flower.ps1:18 char:18
+         Copy-Item <<<<  -Recurse -Path $i.FullName -Destination $i.FullName.Replace($source,$destination).Trim($i.Name)
    + CategoryInfo          : NotSpecified: (:) [Copy-Item], NotSupportedException
    + FullyQualifiedErrorId : System.NotSupportedException,Microsoft.PowerShell.Commands.CopyItemCommand

为什么?

4

1 回答 1

0

最后我想通了。由于我对 Powershell 完全不熟悉,我根本无法编写任何合适的代码。我在 Copy-Item 中仔细检查了一些细节,发现由于我使用相同的命令来复制文件,它可以工作,但对于子文件夹,它需要稍作更改。

这是正确的解决方案:

cls

$source = "All_flowers_images_negatives"
$destination = "Passion_Flower_Negative_Images_temp" 
<#
foreach ($i in Get-ChildItem -Path $source -Recurse)
{
    if ($i.Name -match "image_(?!(000\d\d|001\d\d|002[0-4]\d|0025[0-1]))\d{5}\.jpg")
    {
        Copy-Item -Path $i.FullName -Destination $i.FullName.Replace($source,$destination).Trim($i.Name)
    }
}
#>
foreach ($i in Get-ChildItem -Path $source -Recurse)
{
    if ($i.Name -match "Negatives$")
    {
        Copy-Item -Recurse -Path $i.FullName -Destination $i.FullName.Replace($source,$destination)
    }
}

问题是,Trim($i.Name)需要从文件夹完整路径中修剪文件的名称 - 有意义但在复制子目录的情况下,写入,

$i.FullName.Replace($source,$destination)

完成替换路径的工作并且不需要修剪,因为不涉及文件

于 2015-05-07T09:21:32.137 回答