Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Bestimmte Dateitypen von A nach B kopieren, jedoch nur wenn Verzeichnis B existiert

Mitglied: e1nste1n

e1nste1n (Level 1) - Jetzt verbinden

15.03.2012 um 00:21 Uhr, 4796 Aufrufe, 3 Kommentare

Hallo *,

nach dem durchwühlen einiger Hilfeseiten und dem was sich in Google finden lässt habe ich keine Lösung für mein - anscheinend doch spezielles - Problem gefunden.

Es geht um viele Zehntausend Dateien welche im Quellverzeichnis A in beliebiger Struktur liegen können.

Weiterhin gib es ein Zielverzeichnis B in welche nun Dateien von einem Bestimmten Typ kopiert werden sollen. _Teile_ der Struktur aus A liegen bereits in exakt der gleichen Struktur in B. Die Kunst ist nun das _nur_ die Dateien (bestimmter Typen) aus A kopiert werden zu denen bereits Verzeichnisse in B existieren. Alle anderen (in B neu anzulegenden) Verzeichnisse oder Dateien in diesen sollen ignoriert werden. (Also kein Mirror der Quelle!)

Das klang für mich erst mal nach einem robocopy-befehl wie zum Beispiel:
01.
robocopy.exe "Q:\uelle" "\\Ziel\Ordner" /S /ZB /COPY:DAT /XX *.typ
Leider legt mir das auch die Dateien des / der gewünschten Typen aus A in Verzeichnis B in die jeweiligen Unterordner. Entweder habe nun ich die Parameter von Robocopy noch nicht ganz verstanden oder es bietet die Option das nur bereits existierende Ordner befüllt werden sollen nicht?!

Im Anschluss daran habe ich mich mit der "Verzeichnisse Synchronisieren"-Funktion des TotalCommanders beschäftigt um evtl. einen manuellen Weg zu finden, auch dort bin ich zu keiner Lösung gekommen.

Nach dem suchen und ausprobieren einiger weiterer Möglichkeiten (unter anderem einem WScript) bin ich zur Powershell gekommen, in der es - dessen bin ich mir inzw. eigentlich sicher - relativ einfach möglich sein sollte. Allein das benötigte Detail-Wissen in der Richtung fehlt mir bisher.
Mein Ansatz war den Inhalt von A und B in Variablen zu lesen:
01.
$source = gci -path "Q:\uelle" -r *.typ 
02.
$target = gci -path "\\Ziel\Ordner" -r *.typ
Dann wäre das Vorhaben per Foreach A durchzugehen und zu den Verzeichnissen die auch in B existieren die gewünschten Dateitypen nach Unterverzeichnisstruktur B zu kopieren. Die einzelnen Befehle habe ich imho zusammen, nur weiß ich nicht wie ich den Kram kombiniere.
Prüfe ob Pfad Vorhanden:
01.
"Test-Path \\Ziel\Ordner"
Filtere auf Typ: Ordner:
01.
... | Where {$_.psIsContainer -eq $true}
Vergleiche Elemente (und nehme nur die "Seite" von A nach B):
01.
Compare-Object $source $target -property FullName -PassThru | Where-Object { $_.SideIndicator -eq '=>' }
Für jedes Element prüfe Bedingung und führe etwas aus:
01.
foreach if ($source.fullname -eq $target.Fullname) {tue dinge}
Ich bekomme wie oben geschrieben das Zusammenspiel der Bausteine nicht zusammen. (Ja, ich bin mir dessen bewusst das die einzelnen Kommandos keinen Sinn ergeben, das sind nur meine bisher erfolglosen "Ansätze" über die ich mich in Kombination an das Problem "herandenken" wollte )


Kurz zu den Systemumgebung und Voraussetzungen:
Betriebssystem: Server 2k8r2 / Win7
Pfadlängen (incl. Dateinamen) können mehr als 256 Zeichen enthalten, ebenso wie Sonderzeichen aller Art und Sprache.
Art und Weise der Lösung: Bevorzugt Powershell, andernfalls ist ein Wscript / Batchfile oder (doch bei der Suche übersehenes) Programm dafür auch recht.
Das Ganze muss nicht unbedingt automatisiert ausgeführt werden.


Momentan habe ich mich ein wenig in die Powershell-Lösung verliebt, es besteht aber kein Zwang in der Richtung, bin für neue Ideen offen

Vielen Dank schon einmal vorab!

mfg ... eini
Mitglied: mak-xxl
15.03.2012 um 00:46 Uhr
Moin eini,

da ich noch wach zu sein glaube, sei der Versuch einer Antwort gemacht:

Ich würde die Sache durchaus an robocopy delegieren. Dazu die jeweils zu kopierenden Pfade per Subroutine rekursiv (von unten nach oben) ermitteln und an robocopy übergeben. Wenn die Gefahr besteht, mit einem Unterordner in VZ:\A vorhandene (Unter-)Ordner mit zu kopieren, die in VZ:\B nicht erwünscht sind, dann hilft der Parameter "/xd *". Da der Ausschluss von Ordnern allerdings nur für die erste Unterebene gilt, muss die Subroutine durch entsprechendes Vergleichen mit VZ:\A den (vielen) möglichen Redundanzen beim Kopieren vorbeugen; bei flacher Verzeichnishirarchie ist das aber ein kleineres Problem.
Und ob die Hilfsdienste nun der WSH, die Powershell oder cmd verrichtet, auf die /mir-Funktion von robocopy muss man nicht verzichten.

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: e1nste1n
19.03.2012 um 21:17 Uhr
Hi Mario,

erstmal: danke für deine Antwort. Es geht mir hier um eine Summe von >10.000 Ordnern allein im Ziel, die wie erwähnt in ziemlich tiefen Strukturen liegen (das Ding mit den > 256 Zeichen im Pfad ).

Wenn ich deinen Vorschlag also richtig verstehe meinst du in A jeweils einmal pro Ordner robocopy anwerfen und einfach die gewünschten Typen kopieren lassen? Das würde mir zwar nur die gewünschten Dateitypen nach B werfen, allerdings auch alle Unterordner. Was ich benötige ist ja das nur in die in B vorhandene Struktur kopiert wird.
[edit] sehe beim dritt-lesen grad den von dir erwähnten parameter /xd ... daraus schließe ich das ich mich erst bis in die vorletzte ebene durchhangeln muss um dann robocopy anzuwerfen? wie bekomme ich dann meine dateitypen in der dritt- oder viertletzten Ebene?[/edit]

Was mir inzw. noch eingefallen ist - etwas frickelig - man könnte sich ein Dir-Listing aus B nehmen, und sich daraus die Pfade in A "zusammenbasteln" (mit suchen und ersetzen) und dann für die Liste von Pfaden nen simples copy ... wobei ich mir da Gedanken mache mit >10k Pfaden im Speicher rumzuwürfeln und dann pro Zeile nen Copy auszuführen.

Kennt jemand noch einen anderen Weg?
Bitte warten ..
Mitglied: mak-xxl
19.03.2012 um 22:37 Uhr
Zitat von e1nste1n:
Hi Mario,

erstmal: danke für deine Antwort. Es geht mir hier um eine Summe von >10.000 Ordnern allein im Ziel, die wie erwähnt
in ziemlich tiefen Strukturen liegen (das Ding mit den > 256 Zeichen im Pfad ).

Wenn ich deinen Vorschlag also richtig verstehe meinst du in A jeweils einmal pro Ordner robocopy anwerfen und einfach die
gewünschten Typen kopieren lassen? Das würde mir zwar nur die gewünschten Dateitypen nach B werfen, allerdings auch
alle Unterordner. Was ich benötige ist ja das nur in die in B vorhandene Struktur kopiert wird.
[edit] sehe beim dritt-lesen grad den von dir erwähnten parameter /xd ... daraus schließe ich das ich mich erst bis in
die vorletzte ebene durchhangeln muss um dann robocopy anzuwerfen? wie bekomme ich dann meine dateitypen in der dritt- oder
viertletzten Ebene?[/edit]
Indem robocopy alle 2 Ebenen gerufen wird, und mit /xd alle VZ excludiert werden, die in LW A vorhanden sind, in LW B aber nicht und mit /LEV:n die VZ-Tiefe auf 1 gesetzt wird.

Was mir inzw. noch eingefallen ist - etwas frickelig - man könnte sich ein Dir-Listing aus B nehmen, und sich daraus die
Pfade in A "zusammenbasteln" (mit suchen und ersetzen) und dann für die Liste von Pfaden nen simples copy ... wobei
ich mir da Gedanken mache mit >10k Pfaden im Speicher rumzuwürfeln und dann pro Zeile nen Copy auszuführen.

Kennt jemand noch einen anderen Weg?

Viele Grüße von der Insel - Mario
Bitte warten ..
Ähnliche Inhalte
Windows Userverwaltung

Sicherheitsrichtlinien und bestimmte Dateitypen

Frage von CaddyMWindows Userverwaltung3 Kommentare

Hallo zusammen, ich stehe hier gerade vor einem größeren Rätsel - ich bin als Anwendungsentwickler aber auch eher kein ...

Windows Server

Datei-Ordner Überwachung für bestimmte Dateitypen

gelöst Frage von hushpuppiesWindows Server4 Kommentare

Hallo zusammen, ich bin auf der Suche nach einem möglichst einfachen Programm mit dem ich bestimmte Ordner auf einem ...

Windows Tools

Batch Verzeichnis vergleichen, in einer anderes kopieren

Frage von cappu25Windows Tools11 Kommentare

Halloo an alle, ich habe jetzt schon verdammt lange rumprobiert und gegooglet aber ich bekomme keine Lösung hin. Folgendes: ...

Windows Server

Bestimmte Dateitypen sperren auf RDS Server?

Frage von tomolpiWindows Server5 Kommentare

Hi zusammen, wir überlegen, mit Server 2016 von lokalen Fat-Clients weg zu gehen und zu Thin-Clients zu wechseln. Userprofile ...

Neue Wissensbeiträge
Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 1 TagWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Sicherheit
Microsoft und Skype: Sicherheit
Information von kgborn vor 1 TagSicherheit

Die Tage gab es ja einige Berichte zur Sicherheit des Skype-Updaters. Der Updater von Skype läuft unter dem Konto ...

Datenschutz

Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10

Information von Penny.Cilin vor 2 TagenDatenschutz8 Kommentare

Hallo, passend zum Thema Ablösung LIMUX in München ein Beitrag bei Heise (siehe Link folgend). Behörden ignorieren Sicherheitsbedenken gegenüber ...

Sicherheit
Information Security Hub Munich airport
Information von brammer vor 2 TagenSicherheit

Hallo, Neues Center für Cyber Kriminalität am Münchener Flughafen brammer

Heiß diskutierte Inhalte
DSL, VDSL
Mindestgeschwindigkeiten DSL Telekom
Frage von justlukasDSL, VDSL13 Kommentare

Hallo zusammen, Seit diesem Jahr habe ich Verständnisprobleme mit dem Verhalten der Telekom. Wir haben seit einem Jahr VDSL ...

Switche und Hubs
LANCOM-Switch: Probleme (no link) mit SFP-Modulen?
Frage von THETOBSwitche und Hubs10 Kommentare

Hi zusammen, ich habe folgendes Problem: Und zwar habe ich an einem Standort drei Switche verbaut - LANCOM GS-2326P+, ...

Debian
Wie finde ich den betroffenen user
Frage von ProtectedDebian8 Kommentare

Hallo, Wie kann ich den User finden der dies verursacht hat? Betriebsystem ist Debian 7 your Server/Customer with the ...

Firewall
RB2011 Firewall Rule eine bestimmte Mac oder IP Adresse nicht zu blockieren
Frage von lightmanFirewall8 Kommentare

Hallo liebes Forum mit ihren Spezialisten. Ich habe meine Firewall so konfiguriert das kein Endgerät ohne meine Speziellen Erlaubnis ...