19

There is a folder that contains a lot of files. Only some of the files needs to be copied to a different folder. There is a list that contains the files that need to be copied.

I tried to use copy-item, but because the target subfolder does not exist an exception gets thrown "could not find a part of the path”

Is there an easy way to fix this?

$targetFolderName = "C:\temp\source" $sourceFolderName = "C:\temp\target" $imagesList = ( "C:\temp\source/en/headers/test1.png", "C:\temp\source/fr/headers/test2png" ) foreach ($itemToCopy in $imagesList) { $targetPathAndFile = $itemToCopy.Replace( $sourceFolderName , $targetFolderName ) Copy-Item -Path $itemToCopy -Destination $targetPathAndFile } 

1 Answer 1

21

Try this as your foreach-loop. It creates the targetfolder AND the necessary subfolders before copying the file.

foreach ($itemToCopy in $imagesList) { $targetPathAndFile = $itemToCopy.Replace( $sourceFolderName , $targetFolderName ) $targetfolder = Split-Path $targetPathAndFile -Parent #If destination folder doesn't exist if (!(Test-Path $targetfolder -PathType Container)) { #Create destination folder New-Item -Path $targetfolder -ItemType Directory -Force } Copy-Item -Path $itemToCopy -Destination $targetPathAndFile } 
Sign up to request clarification or add additional context in comments.

2 Comments

nice. is there a easy way to flip this over and do the exact opposite? i.e, copy all files that are NOT in the $imagesList?
@user3026965: see stackoverflow.com/a/16992154/1915920 ... with something like Get-ChildItem $sourceFolderName -exclude $imagesList

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.