2017-04-05 1 views
0

"finalpics"と呼ばれるjpg形式の画像フォルダと、さまざまな形式のRAWファイルを含むいくつかのサブフォルダを持つ別のフォルダ( "sourcepics")があります。他のファイルの存在に基づいてファイルをコピーする(Windows)

「finalpics」にファイルが存在する場合のみ、「sourcepics」とそのサブフォルダからすべてのファイルを別のフォルダ(「sourcefinal」)にコピーするスクリプト(バッチファイル?)が必要です。一例として、

"finalpicsは" mypic1.jpg、mypic2.jpg、mypic3.jpgと呼ばれるファイルが含まれています。

「sourcepics」には、mypic1.dng、mypic2.psd、mypic3.cr2、yourpic1.dng、yourpic2.psd、yourpic3.cr2というファイルが含まれています。

私は、 'yourypic'ファイルではなく 'mypic'ファイルを "sourcefinal"にコピーしたいと思っています。

"finalpics"には1000個以上のjpgがありますが、 "sourcepics"のさまざまなサブフォルダにはおそらく40,000個のファイルがあります。

希望は意味があります。

ありがとうございます。

+1

これまでに何を試しましたか? 'Get-ChildItem'と' Test-Path'を見てください – dbso

+0

あなたのコメントには "mainpics"への参照がありますが、あなたの例では言及していません。これはちょっと混乱します。 – Robin

+0

申し訳ありませんが私の部分のタイプ - 私はepostを編集しました。 – JDG

答えて

1

私は、このPowerShellコードはあなたが何をしているのかと思います。彼らはFinalPicsに存在する場合、それは「SourcePics」を「SourceFinal」から、同じ名前(ファイル拡張子を無視して)のファイルをコピーします:

# Define your folder locations: 
$SourcePicsFolder = 'C:\SourcePics' 
$FinalPicsFolder = 'C:\FinalPics' 
$SourceFinalFolder = 'C:\SourceFinal' 

# Get existing files into arrays: 
$SourcePics = Get-ChildItem -Path $SourcePicsFolder -Recurse 
$FinalPics = Get-ChildItem -Path $FinalPicsFolder -Recurse 

# Loop all files in the source folder: 
foreach($file in $SourcePics) 
{ 
    # Using the basename property (which ignores file extension), if the $FinalPics 
    # array contains a basename equal to the basename of $file, then copy it: 
    if($FinalPics.BaseName -contains $file.BaseName) 
    { 
     Copy-Item -Path $file.FullName -Destination $SourceFinalFolder 
    } 
} 

注:何のフィルタリングは、ファイルの種類に基づいてありませんが(例えば、それはすべてをコピーしますファイル)。また、 'SourcePics'フォルダに同じファイル名で異なるサブフォルダの2つのイメージがあり、この名前のファイルも 'FinalPics'に存在する場合、そのファイルをコピーしようとすると既に存在するファイルについてのエラーが発生することがあります2回目。上書きするには、Copy-Itemコマンドで-Forceパラメータを使用します。

上記のコードを 'SourcePics'の.dngファイルと 'FinalPics'の.jpgファイルでテストしたところ、あなたのファイルは無視されました。

+0

このRobinをありがとう、私はいくつかのファイルを使って簡単なテストを行いました。それは、ファイルの完全なセットでそれを実行することになると私に時間の負荷を節約します。私がファイルフィルタリング(ほんの* .dngと* .crwファイル)をしたいのであれば、それは単純なオプションですか? – JDG

+0

あなたは大歓迎です。次のものを使用することができます: '$ SourcePics = Get-ChildItem -Path $ SourcePicsFolder -Recurse -Include @(" * .dng "、" *。crw ")'。これは、あなたのソース写真のリストに.dngと.crwファイルしか含まれていないので、コピーされたもの(一致する場合)はこれだけになります。 – Robin

関連する問題