2013-02-05 23 views
6

C'è una cartella che contiene molti file. Solo alcuni dei file devono essere copiati in una cartella diversa. C'è una lista che contiene i file che devono essere copiati.Copia un elenco di file in una directory

Ho cercato di usare copia-voce, ma perché la sottocartella di destinazione non esiste un'eccezione si butta "Impossibile trovare una parte del percorso”

C'è un modo semplice per risolvere questo problema?

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

risposta

10

Prova questo come foreach-loop. crea la TargetFolder e le sottocartelle necessarie prima di copiare il 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 
} 
+0

bello. c'è un modo semplice per capovolgere questo più e fare l'esatto contrario? cioè,copia tutti i file ** NON ** in '$ imagesList'? – user3026965

Problemi correlati