Dateien kopieren und umbenennen wenn bereits vorhanden
Hallo Zusammen,
ich habe unzählige Ordner inkl. Unterordner, von denen ich nur die Dateien in einen einzigen Ordner kopieren will.
Mit funktioniert das auch.
Es kann vorkommen, das einige zu kopierende Dateien den gleichen Namen aufweisen. Wie muss ich das Skript erweitern, das Dateien, die aufgrund bestehender Dateien nicht kopiert werden können, umbenannt werden in bspw. Datei_1.txt.
ich habe unzählige Ordner inkl. Unterordner, von denen ich nur die Dateien in einen einzigen Ordner kopieren will.
Mit
Get-ChildItem -path "\\srv1\folder1" -include *.txt -recurse | Move-Item -Destination "srv2\folder1"
Es kann vorkommen, das einige zu kopierende Dateien den gleichen Namen aufweisen. Wie muss ich das Skript erweitern, das Dateien, die aufgrund bestehender Dateien nicht kopiert werden können, umbenannt werden in bspw. Datei_1.txt.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3265046815
Url: https://administrator.de/contentid/3265046815
Ausgedruckt am: 24.11.2024 um 05:11 Uhr
3 Kommentare
Neuester Kommentar
Moin Moin,
Ich weiß, Ich bin OldSchool.
Aber Ich würde bei sowas ROBOCOPY verwenden.
Das kann sowas hervorragend:
Ich weiß, Ich bin OldSchool.
Aber Ich würde bei sowas ROBOCOPY verwenden.
Das kann sowas hervorragend:
-------------------------------------------------------------------------------
ROBOCOPY :: Robustes Dateikopieren für Windows
-------------------------------------------------------------------------------
Gestartet: Mittwoch, 6. Juli 2022 08:07:23
Syntax :: ROBOCOPY Quelle Ziel [Datei [Datei]...] [Optionen]
Quelle :: Quellverzeichnis (Laufwerk:\Pfad oder
\\Server\Freigabe\Pfad)
Ziel :: Zielverzeichnis (Laufwerk:\Pfad oder
\\Server\Freigabe\Pfad)
Datei :: Zu kopierende Dateien (Namen/Platzhalter: Standard
ist "*.*")
::
:: Kopieroptionen:
::
/S :: Kopiert Unterverzeichnisse, jedoch keine leeren
Unterverzeichnisse.
/E :: Kopiert Unterverzeichnisse, einschließlich leerer
Unterverzeichnisse.
/LEV:n :: Kopiert nur die obersten Ebenen der
Quellverzeichnisstruktur.
/Z :: Kopiert Dateien im Neustartmodus.
/B :: Kopiert Dateien im Sicherungsmodus.
/ZB :: Verwendet den Neustartmodus. Im Fall einer
Zugriffsverweigerung wird der Sicherungsmodus verwendet.
/J :: kopieren mit ungepuffertem E/A (empfohlen für sehr große
Dateien).
/EFSRAW :: Kopiert alle verschlüsselten Dateien im EFS RAW-Modus.
/COPY:copyflags :: Gibt an, welche Inhalte für Dateien kopiert werden
sollen (der Standard ist "/COPY:DAT").
(Kopierflags : D=Daten, A=Attribute, T=Zeitstempel, X=Alternative Datenströme überspringen).
(S=Sicherheit=NTFS-ACLs, O=Besitzerinformationen,
U=Überwachungsinformationen).
/SEC :: Kopiert Dateien mit Sicherheitsinformationen
(entspricht "/COPY:DATS").
/COPYALL :: Kopiert alle Dateiinformationen
(entspricht "/COPY:DATSOU").
/NOCOPY :: Kopiert keine Dateiinformationen
(hilfreich in Verbindung mit "/PURGE").
/SECFIX :: Korrigiert die Dateisicherheit in allen Dateien, auch
in ausgelassenen Dateien.
/TIMFIX :: Korrigiert die Uhrzeitangaben für Dateien in allen
Dateien, auch in ausgelassenen Dateien.
/PURGE :: Löscht Zieldateien/-verzeichnisse, die in der Quelle
nicht mehr vorhanden sind.
/MIR :: Spiegelt eine Verzeichnisstruktur
(Entspricht "/E" mit "/PURGE").
/MOV :: Verschiebt Dateien
(löscht Dateien nach dem Kopieren an der Quelle).
/MOVE :: Verschiebt Dateien UND Verzeichnisse
(löscht sie nach dem Kopieren an der Quelle).
/A+:[RASHCNET] :: Fügt die vorhandenen Attribute den kopierten Dateien
hinzu.
/A-:[RASHCNET] :: Entfernt die vorhandenen Attribute aus kopierten
Dateien.
/CREATE :: Erstellt eine Verzeichnisstruktur und nur Dateien mit
einer Länge von Null.
/FAT :: Erstellt Zieldateien nur unter Verwendung von
8.3 FAT-Dateinamen.
/256 :: Deaktiviert die Unterstützung für sehr lange Pfade
(> 256 Zeichen).
/MON:n :: Überwacht die Quelle. Wird erneut ausgeführt, wenn mehr
als n Änderungen gefunden werden.
/MOT:m :: Überwacht die Quelle. Wird bei einer Änderung erneut
ausgeführt in m Minuten.
/RH:hhmm-hhmm :: Ausführungsstunden - Steuert, wann neue Kopiervorgänge
gestartet werden können.
/PF :: Überprüft die Ausführungsstunden pro Datei
(nicht pro Durchgang).
/IPG:n :: Abstand zwischen Paketen (ms), um bei langsamen
Verbindungen Bandbreite freizugeben.
/SJ :: Kopiert Verbindungen als Verbindungen anstatt als Verbindungsziele.
/SL :: Kopiert symbolische Verknüpfungen als Verknüpfungen anstatt als Verknüpfungsziele.
/MT[:n] :: Multithreadkopien mit n Threads erstellen (Standardwert: "8").
n muss zwischen 1 und 128 (einschließlich) liegen.
Die Option ist nicht mit "/IPG" und "/EFSRAW" kompatibel.
Die Ausgabe kann mit "/LOG" umgeleitet werden, um eine bessere Leistung zu erzielen.
/DCOPY:Kopierflag[s] :: zu kopierende Elemente für Verzeichnisse (Standard: "/DCOPY:DA").
(Kopierflags : D=Daten, A=Attribute, T=Zeitstempel, E=EAs, X=Alternative Datenströme überspringen).
/NODCOPY :: kopiert keine Verzeichnisinformationen
(standardmäßig wird "/DCOPY:DA" ausgeführt).
/NOOFFLOAD :: Dateien werden ohne den Windows-Kopieabladungs-
mechanismus kopiert.
/COMPRESS :: Fordert während der Dateiübertragung ggf. Netzwerkkomprimierung an.
::
:: Dateiauswahloptionen:
::
/A :: Kopiert nur Dateien mit dem "Archive"-Attribut.
/M :: Kopiert nur Dateien mit dem "Archive"-Attribut und setzt
das Attribut zurück.
/IA:[RASHCNETO]:: Schließt nur Dateien ein, bei denen eines der Attribute
festgelegt ist.
/XA:[RASHCNETO]:: Schließt Dateien aus, bei denen eines der Attribute
festgelegt ist.
/XF Datei[Datei]:: Schließt Dateien aus, die mit den angegebenen
Namen/Pfaden/Platzhaltern übereinstimmen.
/XD Verz.[Verz.]:: Schließt Verzeichnisse aus, die mit den angegebenen
Namen/Pfaden übereinstimmen.
/XC :: Schließt geänderte Dateien aus.
/XN :: Schließt neuere Dateien aus.
/XO :: Schließt ältere Dateien aus.
/XX :: Schließt zusätzliche Dateien und Verzeichnisse aus.
/XL :: Schließt einsame Dateien und Verzeichnisse aus.
/IS :: Schließt identische Dateien ein.
/IT :: Schließt optimierte Dateien ein.
/MAX:n :: Maximale Dateigröße - schließt Dateien aus, die größer
als n Bytes sind.
/MIN:n :: Minimale Dateigröße - schließt Dateien aus, die kleiner
als n Bytes sind.
/MAXAGE:n :: Maximales Dateialter - schließt Dateien aus, die älter
als n Tage/Datum sind.
/MINAGE:n :: Minimales Dateialter - schließt Dateien aus, die neuer
als n Tage/Datum sind.
/MAXLAD:n :: Maximales Datum des letztes Zugriffs - schließt Dateien
aus, die seit n nicht verwendet wurden.
/MINLAD:n :: Minimales Datum des letztes Zugriffs - schließt Dateien
aus, die seit n verwendet wurden.
(Wenn n < 1900, dann ist n = n Tage, andernfalls ist
n = Datum im Format JJJJMMTT).
/FFT :: Geht von FAT-Uhrzeitangaben für Dateien aus (Granularität von zwei Sekunden).
/DST :: Kompensiert Zeitunterschiede von einer Stunde aufgrund
der Sommerzeit.
/XJ :: Schließt Links (für Dateien und Verzeichnisse) und Verbindungspunkte aus.
/XJD :: Schließt symbolische Verknüpfungen für Verzeichnisse und Verknüpfungspunkte aus.
/XJF :: Schließt symbolische Verknüpfungen für Dateien aus.
/IM:: Enthält geänderte Dateien (abweichende Änderungszeiten).
::
:: Wiederholungsoptionen:
::
/R:n :: Anzahl von Wiederholungsversuchen bei fehlerhaften
Kopiervorgängen. Der Standardwert ist 1 Million.
/W:n :: Wartezeit zwischen Wiederholungsversuchen.
Der Standardwert ist 30 Sekunden.
/REG :: Speichert "/R:n" und "/W:n" in der Registrierung als
Standardeinstellungen.
/TBD :: Wartet, dass Freigabenamen definiert werden (Wiederholungsfehler 67).
/LFSM :: Betrieb im Modus "wenig freier Speicherplatz", ermöglicht Kopieren, Anhalten und Fortsetzen (siehe Anmerkungen).
/LFSM:n[KMG] :: /LFSM, gibt die Floor-Größe in [K:Kilo,M:Mega,G:Giga] Byte an.
::
:: Protokollierungsoptionen :
::
/L :: Listet nur auf. Es werden keine Kopiervorgänge
ausgeführt, Zeitstempel erstellt oder Dateien gelöscht.
/X :: Meldet alle zusätzlichen Dateien, nicht nur die
ausgewählten Dateien.
/V :: Erstellt eine ausführliche Ausgabe mit ausgelassenen
Dateien.
/TS :: Schließt Zeitstempel von Quelldateien in die Ausgabe ein.
/FP :: Schließt den vollständigen Pfadnamen von Dateien in
die Ausgabe ein.
/BYTES :: Gibt Größen in Bytes aus.
/NS :: Keine Größe - Dateigrößen werden nicht protokolliert.
/NC :: Keine Klasse - Dateiklassen werden nicht protokolliert.
/NFL :: Keine Dateiliste - Dateinamen werden nicht protokolliert.
/NDL :: Keine Verzeichnisliste - Verzeichnisnamen werden nicht
protokolliert.
/NP :: Kein Status - der Prozentsatz kopierter Elemente wird
nicht angezeigt.
/ETA :: Zeigt die ungefähre Empfangszeit der kopierten Dateien
an.
/LOG:Datei :: Gibt den Status der Protokolldatei aus (überschreibt das
vorhandene Protokoll).
/LOG+:Datei :: Gibt den Status der Protokolldatei aus
(wird an das vorhandene Protokoll angefügt).
/UNILOG:Datei :: Gibt den Status der Protokolldatei als UNICODE aus
(überschreibt das vorhandene Protokoll).
/UNILOG+:Datei :: Gibt den Status der Protokolldatei als UNICODE aus
(wird an das vorhandene Protokoll angefügt).
/TEE :: Gibt Daten in das Konsolenfenster und die Protokolldatei
aus.
/NJH :: Kein Auftragsheader.
/NJS :: Keine Auftragszusammenfassung.
/UNICODE :: Gibt den Status als UNICODE aus.
::
:: Auftragsoptionen:
::
/JOB:Auftragsname :: Übernimmt Parameter aus der angegebenen Auftragsdatei.
/SAVE:Auftragsname :: Speichert Parameter in der angegebenen Auftragsdatei.
/QUIT :: Beendet den Vorgang nach der Verarbeitung
der Befehlszeile (zum Anzeigen von Parametern).
/NOSD :: Es ist kein Quellverzeichnis angegeben.
/NODD :: Es ist kein Zielverzeichnis angegeben.
/IF :: Schließt die folgenden Dateien ein.
::
:: Hinweise:
::
Bei der Verwendung von /PURGE oder /MIR im Stammverzeichnis des Volumes
wurde der angeforderte Vorgang von Robocopy zuvor auch auf Dateien innerhalb
des Verzeichnisses mit Systemvolumeinformationen angewendet.
Dies ist nicht länger der Fall. Falls angegeben, überspringt Robocopy Dateien
oder Verzeichnisse mit diesem Namen im obersten Quell- und Zielverzeichnis des Kopiervorgangs.
Die geänderte Dateiklassifizierung gilt nur, wenn sowohl die Quell-
als auch die Zieldateisysteme Änderungszeitstempel unterstützen (z. B. NTFS)
und die Quell-und Zieldateien unterschiedliche Änderungszeiten aufweisen, ansonsten jedoch
identisch sind. Diese Dateien werden nicht standardmäßig kopiert. Geben Sie /IM an,
um sie einzubeziehen.
Das /DCOPY:E-Flag erfordert, dass das Kopieren erweiterter Attribute
für Verzeichnisse versucht werden sollte. Beachten Sie, dass robocopy derzeit fortgesetzt wird,
wenn die EAs eines Verzeichnisses nicht kopiert werden können. Dieses Flag ist auch nicht
in /COPYALL.
Verwendet /LFSM-Anforderungen für robocopy, um im Modus „wenig freier Speicherplatz” zu arbeiten.
In diesem Modus wird Robocopy angehalten, wenn eine Dateikopie dazu führt,
dass freier Speicherplatzes auf dem Ziel-Volume unter einen "Floor"-Wert sinkt, der
explizit durch die LFSM:n[KMG]-Form des Flags angegeben werden kann.
Wenn /LFSM ohne expliziten Floor-Wert angegeben ist, wird dieser auf
zehn Prozent der Größe des Ziel-Volume festgelegt.
Wenig freier Speicherplatz ist inkompatibel mit /MT, /EFSRAW, /B und /ZB.
Servus.
Du musst dich schon entscheiden, "Kopieren" oder "Verschieben" sind zwei unterschiedliche Dinge, dein Code verschiebt ... so does this too ... ansonsten Move-Item mit Copy-Item tauschen.
Grüße Uwe
Du musst dich schon entscheiden, "Kopieren" oder "Verschieben" sind zwei unterschiedliche Dinge, dein Code verschiebt ... so does this too ... ansonsten Move-Item mit Copy-Item tauschen.
$source = "\\srv1\folder1"
$target = "\\srv2\folder1"
foreach($file in Get-ChildItem $source -file -filter *.txt -recurse){
$dst = "$target\$($file.Name)"
$cnt = 1
while(Test-Path $dst){
$dst = "$target\$($file.Basename)_$cnt$($file.Extension)"
$cnt++
}
$file | Move-Item -Destination $dst -force -verbose
}