Powershell Get-ChildItem - Copy-Item mit Array
Hallo zusammen,
kurze Anfängerfrage:
Ziel ist es, dass Dateien eines bestimmten Ordners in mehrere Ziele kopiert werden. Das Einlesen der variablen $quelle funktioniert auch ohne Probleme, jedoch passt das mit dem Ziel nicht ganz. Die Dateien werden aktuell in das Verzeichnis kopiert, in dem die PS liegt.
Kann mir jemand bitte kurz auf den Sprung helfen ?
Gruß
kurze Anfängerfrage:
$quelle = Read-Host -Prompt 'Eingabe vom Quellverzeichnis!'
$arrayZiel = @()
do {
$eingabe = (Read-Host "Bitte Ziel eingeben - sofern keins mehr noetig, bitte mit -ok- bestaetigen")
if ($eingabe -ne '') {$arrayZiel += $eingabe}
}
until ($eingabe -eq 'ok')
$arrayZiel
Get-ChildItem $quelle -Recurse | Copy-Item -Destination $Ziel
pause
Ziel ist es, dass Dateien eines bestimmten Ordners in mehrere Ziele kopiert werden. Das Einlesen der variablen $quelle funktioniert auch ohne Probleme, jedoch passt das mit dem Ziel nicht ganz. Die Dateien werden aktuell in das Verzeichnis kopiert, in dem die PS liegt.
Kann mir jemand bitte kurz auf den Sprung helfen ?
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 639709
Url: https://administrator.de/contentid/639709
Ausgedruckt am: 25.11.2024 um 03:11 Uhr
7 Kommentare
Neuester Kommentar
Also ich hab grade folgendes bei mir erfolgreich ausprobiert:
Der 4 Copy Befehl hat einen Fehler ausgeworfen, weil es "ok" war, die anderen 3 haben funktioniert. Wobei ich (sehe ich grade) nur eine Datei kopiert habe und keinen ganzen Ordner, indem ich C:\test\test.txt als Quelle eingegeben habe. Und ja, Copy Item würde ich bei einem echten Skript so nicht stehen lassen, das ist nur zum zeilenweisen Test.
$quelle = Read-Host -Prompt 'Eingabe von Quellverzeichnis!'
$arrayZiel = @()
do {
$eingabe = (Read-Host "Bitte Ziel eingeben - sofern keins mehr noetig, bitte mit -ok- bestaetigen")
if ($eingabe -ne '') {$arrayZiel += $eingabe}
}
until ($eingabe -eq 'ok')
$arrayZiel
Get-ChildItem $quelle -Recurse | Copy-Item -Destination $arrayZiel
Get-ChildItem $quelle -Recurse | Copy-Item -Destination $arrayZiel[1]
Get-ChildItem $quelle -Recurse | Copy-Item -Destination $arrayZiel[2]
Get-ChildItem $quelle -Recurse | Copy-Item -Destination $arrayZiel[3]
Der 4 Copy Befehl hat einen Fehler ausgeworfen, weil es "ok" war, die anderen 3 haben funktioniert. Wobei ich (sehe ich grade) nur eine Datei kopiert habe und keinen ganzen Ordner, indem ich C:\test\test.txt als Quelle eingegeben habe. Und ja, Copy Item würde ich bei einem echten Skript so nicht stehen lassen, das ist nur zum zeilenweisen Test.
Ich würde es so machen:
Allerdings: Wenn du als Quelle zum Beispiel c:\temp\Quelle wählst und als Ziel c:\temp\Test, dann passiert folgendes:
Ist Test nicht vorhanden wird der Inhalt von c:\temp\Quelle nach c:\temp\Test geschrieben
Ist Test vorhanden, dann wird der Inhalt von c:\temp\Quelle nach c:\temp\Test\Quelle geschrieben.
Kenne jetzt deine Struktur nicht aber ggf. müsste man mit test-path noch prüfen ob der Ordner vorhanden ist der als Ziel eingegeben wurde.
$quelle = Read-Host -Prompt 'Eingabe von Quellverzeichnis!'
$arrayZiel = @()
do {
$eingabe = (Read-Host "Bitte Ziel eingeben - sofern keins mehr noetig, bitte mit -ok- bestaetigen")
if ($eingabe -ne '') {$arrayZiel += $eingabe}
}
until ($eingabe -eq 'ok')
$arrayZiel
foreach($Pfad in $arrayZiel)
{
if ($pfad -ne "ok")
{
Copy-Item $quelle -Recurse $Pfad -Force
}
}
Allerdings: Wenn du als Quelle zum Beispiel c:\temp\Quelle wählst und als Ziel c:\temp\Test, dann passiert folgendes:
Ist Test nicht vorhanden wird der Inhalt von c:\temp\Quelle nach c:\temp\Test geschrieben
Ist Test vorhanden, dann wird der Inhalt von c:\temp\Quelle nach c:\temp\Test\Quelle geschrieben.
Kenne jetzt deine Struktur nicht aber ggf. müsste man mit test-path noch prüfen ob der Ordner vorhanden ist der als Ziel eingegeben wurde.
Moin,
warum einfach, wenn es auch kompliziert geht.
Ob der Quellpfad exisistiert, sollte man vielleicht auch noch testen.
hth
Erik
warum einfach, wenn es auch kompliziert geht.
$quelle = Read-Host -Prompt 'Eingabe vom Quellverzeichnis!'
$arrayZiel = @()
do {
$eingabe = (Read-Host "Bitte Ziel eingeben - sofern keins mehr noetig, bitte mit Enter bestaetigen")
if ($eingabe) {
$arrayZiel += $eingabe
}
}
until (-not $eingabe)
foreach($ziel in $arrayZiel) {
if(Test-Path($ziel)) {
Copy-Item $quelle\* -Recurse -Destination $ziel
}
else {
write-error "$ziel existiert nicht!"
}
}
Ob der Quellpfad exisistiert, sollte man vielleicht auch noch testen.
hth
Erik