robocopy: Inhalt(!) bestimmter Ordner (string) verschieben + Variablen

tomm1984

Lt. Junior Grade
Registriert
Juni 2016
Beiträge
332
Hallo geschätztes Forum,

ich benötige mal wieder bitte Hilfe bei Robocopy (batch).

High Level: Dateien und Ordner, die in bestimmten Ordnern liegen (nach Zeichenkette suche) in Quelle sollen nach Ziel verschoben werden. Die Haupt-Ordner in der Quelle selbst sollen dabei erhalten bleiben.

Zeichenkette der relevanten Ordner sowie Quelle und Ziel sollen per Variable gepflegt werden.

2022-02-12 move01.PNG

2022-02-12 move02.PNG

Das habe ich bisher:
Code:
:::::::::::::::::::::::::::::::::::: -- VARIABLES -- ::::::::::::::::::::::::::::::::::::

::: ENVIRONMENT :::

SET "sourcepath=C:\Users\Administrator\Desktop\robocopy ordner\from dir"
SET "targetpath=C:\Users\Administrator\Desktop\robocopy ordner\to dir"
SET "dirfilter=_abc"




:::::::::::::::::::::::::::::::::::: -- EXECUTION -- ::::::::::::::::::::::::::::::::::::
 :: >>> MOVE >>>
robocopy.exe "%sourcepath%" "%targetpath%" *"%dirfilter%".* /MOVE

pause

Danke für Unterstützung!
Ergänzung ()

...und der DIR-Filter, im oben im Code-Block eingefügt, funktioniert leider auch noch nicht
 
Zuletzt bearbeitet:
Da stelle mer uns dumm un sage…

Warum RoboCopy wenn ich verschieben will?! Dazu gäbe es MOVE alleine.

So komplex wie das aufgebaut ist bleibt dir nicht viel übrig als jeden Ordner einzeln anzufassen und über Batch abzuarbeiten.
Das lässt sich nicht… programmieren… ohne es nun eben Schritt für Schritt anzugeben. Liste bleibt Liste und will abgefrühstückt werden.

Da muss jedes Paar beieeinanderbleiben. Vermutlich kannst du nicht mal Unterordner über Bekanntes wie /S greifen.

CN8
 
  • Gefällt mir
Reaktionen: PHuV und BFF
Exakt.

Mit Robocopy geht das, nur halt nicht wirklich mit einem Job.
Wenn aber eh stupide verschoben werden sol. Ok. Das was @cumulonimbus8 sagt.
 
  • Gefällt mir
Reaktionen: PHuV
BFF schrieb:
Mit Robocopy geht das, nur halt nicht wirklich mit einem Job.
Wenn aber eh stupide verschoben werden sol. Ok. Das was @cumulonimbus8 sagt.

Hmm, schade. Ich hatte gedacht, dass
1) zunächst die Quelle nach Ordnern durchsucht wird, dessen Namen eben ganz oder zum Teil mit dem Suchstring übereinstimmen
2) die "gesammelten" Ordner (bzw. dessen Inhalt) werden dann stumpf kopiert
3) abschließend wird alles unterhalb der "gesammelten" Quell-Ordner gelöscht

Man müsste eigentlich die Ordner cashen und dann den nen Loop mit MOVE (ggf. copy*) so lange laufen lassen, bis alle Ordner verschoben (kopiert) sind.

*Hängt davon ab, ob man auch nur den Inhalt verschieben kann oder ob man kopieren muss und dann alles unterhalb in der Quelle löschen muss, um den Haupt-Ordner selbst zu erhalten.

Ich hatte gehofft, dass geht irgendwie.
Einst hatte ich auf puresync gesetzt, doch leider verändert das Programm beim Verschieben das Erstelldatum der Datei und das bringt andere, unschöne Nebeneffekte mit sich. Da ich jüngst Skripting mögen gelernt habe, fand ich das eine solide Alternative.
 
tomm1984 schrieb:
Hmm, schade. Ich hatte gedacht, dass
1) zunächst die Quelle nach Ordnern durchsucht wird, dessen Namen eben ganz oder zum Teil mit dem Suchstring übereinstimmen
2) die "gesammelten" Ordner (bzw. dessen Inhalt) werden dann stumpf kopiert
3) abschließend wird alles unterhalb der "gesammelten" Quell-Ordner gelöscht
Und dafür brauchst Du eben ein Script. Eine komplexe Abfolge wirst Du seltens bis gar nicht mit nur einem Programmschritt erledigen können.
tomm1984 schrieb:
Ich hatte gehofft, dass geht irgendwie.
Script.
 
ok, danke für euren Input.

Skript geht dann wohl in Richtung PowerShell, korrekt?
 
Zuletzt bearbeitet:
Ja, oder noch old school CMD, aber Powershell ist hier viel besser, aktuell, und viel mächtiger. Aber es ist - leider - nicht ganz einfach zu handhaben. Und wundere Dich nicht, wenn dann Dein Script, mit Prüfungen, guten Fehlerausgaben, Logs, Kommentaren usw. mit den simplen Schritten dann schnell zu einem Hunderzeiler wird. 😁 (So gehts mir immer, wenn ich mal "schnell" ein simples Script für eine simple Sache schreibe).
 
Zuletzt bearbeitet:
tomm1984 schrieb:
Ich hatte gehofft, dass geht irgendwie.

Ja das geht irgendwie.
Nur halt nicht mit einem Robocopy Job. Hat ich schon mal getippt.

BFF schrieb:
Mit Robocopy geht das, nur halt nicht wirklich mit einem Job.

Die verschiedenen Aufgaben in einen Script, hat ja @PHuV auch schon erwaehnt, zu verpacken ist so kompliziert nicht. Musst Dich nur entscheiden was.
 
  • Gefällt mir
Reaktionen: PHuV
@PHuV @BFF ,

verstanden. Man kann also auch mit cmd die Ordner suchen, zwischenspeichern und loopen.

@Powershell: Ja, ich habe schon mal ein Script zugespielt bekommen und das das leicht modifiziert. Für die recht banale Funktionalität war da eine Menge drum herum ... ich erinnere mich.

Da brauche ich wohl etwas mehr Hilfe und das sprengt meinen Samstagabend; da muss ich mir anderweitig helfen lassen. Danke euch.
Ergänzung ()

Falls ihr da zufällig ein Freeware-Programmchen kennt, haltet euch nicht zurück :D

FreeFileSync kann - ähnlich wie PureSync (Backup-Funktion) - diese Ordner aufspüren, ändert erfreulicherweise KEINES der Daten (date modified, date created) bietet aber - wie der Name schon vermuten lässt - kein Löschen an.

Ein bisl nervig :-/

In jedem Fall danke!
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: PHuV
PowerShell:
function MoveMyStuff ($Origin, $Destination) {

    $Files = Get-ChildItem -File -Recurse $Origin

    foreach ($File in $Files){
        if($File.Name.Contains("blabla")){
            New-Item -ItemType SymbolicLink -Target $File.FullName -Path $Destination\$File
        }
    }
}

@tomm1984 Ich habe hier mal ein kleines Skript von mir kopiert, das symbolische Links in PowerShell anlegt. Hier würde es für alle Dateien im Ordner und Unterordnern von $Origin, die den String "blabla" enthalten, einen in $Destination anlegen.

Allerdings ohne den Pfad auf Begriffe zu durchsuchen und ohne Beibehalten der Pfadstruktur (das war mir bei meinem Einsatzzweck egal).

Aber vielleicht ist es für dich hilfreich um zu sehen, in welche Richtung es gehen sollte (musst natürlich dann die entsprechenden Sachen wie verschieben und den kompletten Pfad bekommen etc. noch googeln und dementsprechend das Skript hauptsächlich in Zeile 7 anpassen)
 
  • Gefällt mir
Reaktionen: Art Vandelay
oh geil :o

...damit habe ich nicht gerechnet. na das probiere ich gleich mal aus! ... und berichte

@Maviapril2 besten Dank!
 
  • Gefällt mir
Reaktionen: Maviapril2
Hallo in die Runde. Durch Hilfe eines treuen Freundes sieht das Skripting wie folgt aus:

PowerShell:
#Basisverzeichnis für Suche
$baseDirA = "W:\live backup\"
#Basisverzeichnis für Kopie
$baseDirB = 'Y:\offload\'
#Suchstring
$sString = '_offload_#1'
#Zähler für Loop
$count = 0
#Ordnerliste
$folders = Get-ChildItem -dir $baseDirA -Recurse -Include *$sString*



#Schleife fuer kopie
while ($folders.Count -gt $count)
{
$folderString = ($folders[$count]).ToString()
$subfolders = $folderString.TrimStart($baseDirA)
#debug#Write-Output $count
#Write-Output $baseDirA
#Write-Output $folderString
#Write-Output $subfolders
robocopy $folders[$count] $baseDirB$subfolders /E /MOV
$count++
}

Wenn jetzt ein Ordner (egal, auf welcher Ebene) den Part 'offload#1' enthält, wird er verschoben.

Im Grund funktioniert es wie gewollt, allerdings zeigt der TRIM-Befehl ein merkwürdiges Verhalten dann, wenn ein Ordner mit demselben Buchstaben anfängt wie der Pfad (z.B. "D:\abc\" und ein Ordner "Delta" heißt) ... aber auch bei bestimmten anderen Ordnern kommt Kauderwelsch raus. Für das Reine Verschieben meiner überwiegend gepackten Dateien in den entsprechenden Unterordnern erfüllt es aber seinen Zweck.

Falls jemand eine Idee zum TRIM-Befehl hat, so nehmen wir sachdienliche Hinweise gern entgegen ;)

Vielen Dank.
 
Zurück
Oben