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)
    }
}

選択的なファイル コピーは機能しますが (そのためコメント アウトしました)、2 番目のコマンドはフォルダー構造のみをコピーし、サブフォルダー内のファイルはコピーしません。どのような変更を加える必要がありますか?

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 に答える