PowerShell, batch - bestimmte Dateien mittels Liste und Schleife kopieren
Hallo Community,
ich habe eine Anfängerfrage: Ich benötige ein Script welches in einer Schleife bestimmte Dateien aus einem Verzeichnis in ein neues kopiert. Die Liste der Dateien beziehe ich aus einer Textdatei. Folgendes hab ich in der PowerShell versucht:
Das Problem ist, dass ich m.M.n. aus dem Array eine Liste erzeugen muss, damit er wirklich nur die einzelnen Zeilen der array.txt verwendet.
Danke für eure Hilfe!
ich habe eine Anfängerfrage: Ich benötige ein Script welches in einer Schleife bestimmte Dateien aus einem Verzeichnis in ein neues kopiert. Die Liste der Dateien beziehe ich aus einer Textdatei. Folgendes hab ich in der PowerShell versucht:
$array = @(import-csv .\array.txt)
foreach ($i in $array.arraylist)
{
copy .\alt\*$i*.txt .\neu\
}
Das Problem ist, dass ich m.M.n. aus dem Array eine Liste erzeugen muss, damit er wirklich nur die einzelnen Zeilen der array.txt verwendet.
Danke für eure Hilfe!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 298204
Url: https://administrator.de/contentid/298204
Ausgedruckt am: 19.11.2024 um 09:11 Uhr
5 Kommentare
Neuester Kommentar
Moin.
Beispiel wenn in deiner Textdatei nur Pfade in dieser Weise untereinander stehen:
Dann geht das hiermit
Gruß jodel32
Zitat von @brause1701:
Die Liste der Dateien beziehe ich aus einer Textdatei. Folgendes hab ich in der PowerShell versucht:
Wie sieht diese genau aus ? Trennzeichen, Überschriften etc. pp...Die Liste der Dateien beziehe ich aus einer Textdatei. Folgendes hab ich in der PowerShell versucht:
Das Problem ist, dass ich m.M.n. aus dem Array eine Liste erzeugen muss, damit er wirklich nur die einzelnen Zeilen der array.txt verwendet.
Nein. Zeige uns den Aufbau deiner Text/CSV-Datei dann können wir dir 100% weiterhelfen. Danke.Beispiel wenn in deiner Textdatei nur Pfade in dieser Weise untereinander stehen:
C:\Pfad1
C:\Pfad2
C:\Pfad3
gc 'C:\textdatei.txt' | %{copy-item -Path "$_\*.txt" -Destination 'C:\neu'}
Das ist kein Problem. Es ist also eine ganz normale CSV-Datei. Diese können wir uns als Objekt importieren und dann via FOR-Schleife itterieren
Gruß jodel32
p.s. den neuen Post kannst du wieder löschen, damit wir das hier abfackeln können. Und den gelöst Status kannst du wieder selbst zurücksetzen.
Habe leider keine Benachrichtigung vom Forum bekommen deswegen die verspätete Antwort, da scheint was mit den Benachrichtigungen schief gelaufen zu sein.
# CSV Datei als Objekt importieren
$csv = Import-CSV 'C:\textdatei.csv' -Delimiter ";"
# Jede Zeile der CSV mit FOR-Schleife durchlaufen
$csv | %{
# Hinzufügen einer Zeile zu einer eventuell vorhandenen Textdatei
gci "C:\quellordner\$($_.num).txt" | %{
(@("Neue Zeile") + (gc $_.Fullname)) | out-file $_.Fullname
}
# Dateien mit dem entsprechendem Namen der aktuellen Zeile der CSV verschieben
copy-item -Path "C:\Quellordner\$($_.num)*" -Destination 'C:\neu'
}
p.s. den neuen Post kannst du wieder löschen, damit wir das hier abfackeln können. Und den gelöst Status kannst du wieder selbst zurücksetzen.
Habe leider keine Benachrichtigung vom Forum bekommen deswegen die verspätete Antwort, da scheint was mit den Benachrichtigungen schief gelaufen zu sein.
Zeile 8 einfach austauschen...
Statt -replace kannst du auch auf jedes einzelne Zeichen per Index [n] zugreifen und ersetzen, wie du lustig bist.
Achtung bei -replace wird mit Regular Expression Syntax gearbeitet
$content = gc $_.Fullname
(@(($content[0..1] -replace '10;11','1;2')) + ($content | select -skip 2)) | out-file $_.Fullname
Achtung bei -replace wird mit Regular Expression Syntax gearbeitet