2016-09-09 2 views
2

Ich versuche, eine Lösung Kopieren einiger Dateien von einem Ort zu einem anderen Skript ..Fehlermeldung im Skript

Ich habe eine Liste von Dateien in einem CSV-Format, mit Header

"ParentFolder, Name, FullName, lastwritetime." 

Inhalt die Datei ist, die Hunderte von Zeilen hat, und verschiedene Wege, aber gleiche Laufwerksbuchstabe:

"X:\clients\A90\201AA3.05\","2012.08 RAP Proposal.xlsm","X:\clients\A90\201AA3.05\2012.08 RAP Proposal.xlsm","20/05/2016 10:41:08" 

Was ich die oben genannten tun möchte, ist kopieren .. "X:\clients\A90\201AA3.05\2012.08 RAP Proposal.xlsm" zu einem neuen Speicherort mit unterschiedlichen Laufwerk, aber gleiche Verzeichnisstruktur. Also in der CSV-Datei habe ich den Dateinamen und Pfad, aber bin mir nicht sicher, wie man das Laufwerk von dort aufteilen und eine Variable erstellen.

ich eine foreach-Schleife haben ..

$ToCopy = Import-Csv "c:\temp\log.csv" 
foreach($Line in $ToCopy) 
{ 
    $FullPath = $Line.ParentFolder 
    $File = $Line.Name 
    $FullName = $Line.FullName 

    $file = "$FullPath\$FullName" 
    $DestPath = Split-Path $FullPath -NoQualifier 
    Copy-Item "$FullName" -Destination c:\test\$DestPath 
} 

Fehlermeldung, die ich erhalte ist:

+ CategoryInfo   : NotSpecified: (:) [Copy-Item], DirectoryNotFoundException 
+ FullyQualifiedErrorId : System.IO.DirectoryNotFoundException,Microsoft.PowerShell.Commands.CopyItemCommand 

Copy-Item : Could not find a part of the path 'C:\test\clients\A90\Support\_index0901\'. 
At line:9 char:9 
+   Copy-Item "$FullName" -Destination c:\test\$DestPath 
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+ CategoryInfo   : NotSpecified: (:) [Copy-Item], DirectoryNotFoundException 
+ FullyQualifiedErrorId : System.IO.DirectoryNotFoundException,Microsoft.PowerShell.Commands.CopyItemCommand 

Antwort

0

Sie müssen die Ordner erstellen, bevor Sie versuchen, Dateien in sie zu kopieren.

Hier ist ein Weg, es zu tun, vereinfacht von dem, was Sie haben, aber mit einer zusätzlichen Zeile, um die Erstellung der Ordner kümmern.

foreach($File in $ToCopy) 
{ 
    $DestPath = Join-Path -Path 'c:\test' -ChildPath (Split-Path $File.ParentFolder -NoQualifier) 
    If (-not (Test-Path -Path $DestPath)) { New-Item -Path $DestPath -Force -ItemType Directory } 
    Copy-Item $File.FullName -Destination $DestPath -WhatIf 
} 

(Seien Sie vorsichtig, ich habe die Iterationsvariable von $ Line $ File ändern)

+0

ein Charme, vielen Dank. Genau das, was ich brauchte, – yardyy

0

Sie versuchen, Dateien in c:\test\ Verzeichnis zu kopieren, die nicht existiert. Erstellen Sie dieses Verzeichnis vor Schleife:

mkdir c:\test\ 

oder kann im Falle Verzeichnis vorhanden

mkdir c:\test\ -Force 
2

Sie den Fehler erhalten, weil die Verzeichnisstruktur des Zielpfad wahrscheinlich nicht

existiert zu lösen Sie können eine 'temporäre' Datei mit New-Item ... -Force erstellen, die bei Bedarf die fehlenden Verzeichnisse erstellt und dann diese Datei mit Copy-Item überschreibt, so wie

$ToCopy = Import-Csv "c:\temp\log.csv" 
foreach($Line in $ToCopy) 
{ 
    $FullPath = $Line.ParentFolder 
    $File = $Line.Name 
    $FullName = $Line.FullName 

    $file = "$FullPath\$FullName" 
    $DestPath = Split-Path $FullPath -NoQualifier 
    $DestFile = c:\test\$DestPath 
    New-Item -ItemType File -Force $DestFile 
    Copy-Item "$FullName" -Destination $DestFile -Force 
} 
Verwandte Themen