Script gesucht zum Auflösen und Wiederherstellen von Ordner-Hierachien
Hallo zusammen,
ich suche ein script bzw. tool welches aus meheren Unterordnern die Dateien auf eine "Ebene" kopiert zum leichteren bearbeiten. Nach dem bearbeiten sollte es möglich sein die Daten wieder in die vorhandene Ordnerstruktur zurück zu kopieren.
Eine gute Beschreibung der Funktion ist dies:
Die Funktion "extrahiert" Dateien in Unterordnern bis zu einer definierbaren Ebene und leitet diese an einen nächsten Ordner flach für die Verarbeitung weiter. Diese Option eignet sich insbesondere für einen Workflow, bei dem in einem Überwachten Ordner mehrere Unterordner z.B. für bestimmte Mitarbeiter oder Kunden angelegt werden. Die Daten sollen aber "flach" durch den nächsten Arbeitsschritt laufen. Über die Funktion kann man die Daten nach der Bearbeitung wieder in die ursprüngliche Struktur ablegen lassen.
Leider ist das Programm wo die Beschreibung dazu gehört viel zu teuer und ich wäre euch super dankbar wenn ihr mir helfen könntet ein vergleichbares script oder tool zu finden.
Danke un dGruß
ich suche ein script bzw. tool welches aus meheren Unterordnern die Dateien auf eine "Ebene" kopiert zum leichteren bearbeiten. Nach dem bearbeiten sollte es möglich sein die Daten wieder in die vorhandene Ordnerstruktur zurück zu kopieren.
Eine gute Beschreibung der Funktion ist dies:
Die Funktion "extrahiert" Dateien in Unterordnern bis zu einer definierbaren Ebene und leitet diese an einen nächsten Ordner flach für die Verarbeitung weiter. Diese Option eignet sich insbesondere für einen Workflow, bei dem in einem Überwachten Ordner mehrere Unterordner z.B. für bestimmte Mitarbeiter oder Kunden angelegt werden. Die Daten sollen aber "flach" durch den nächsten Arbeitsschritt laufen. Über die Funktion kann man die Daten nach der Bearbeitung wieder in die ursprüngliche Struktur ablegen lassen.
Leider ist das Programm wo die Beschreibung dazu gehört viel zu teuer und ich wäre euch super dankbar wenn ihr mir helfen könntet ein vergleichbares script oder tool zu finden.
Danke un dGruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 61408
Url: https://administrator.de/contentid/61408
Ausgedruckt am: 24.11.2024 um 16:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo phatair!
Eine 1:1-Umsetzung der gewünschten Funktionalität habe ich zwar nicht anzubieten, aber was das "flattening" anlangt, könnte vielleicht der folgende VB-Script-Entwurf eine Alternative darstellen:
Funktion:
Erstelle vom angegebenen Basis-Ordner ausgehend einen neuen Ordner "Arbeit" (Name definiert in "Const"-Zeile) und in diesem Arbeitsordner Links zu allen Dateien der Ordner unterhalb des Basisordners (noch ohne Einschränkung der Ordnertiefe).
Der Basisordner kann beim Aufruf des Scripts als Argument (um zB eine Verknüpfung für oft benötigte Basisordner zu erstellen) übergeben werden. Weiters ist es möglich, den Basisordner per Drag and Drop auf das Script zu ziehen. Wird das Script einfach per Doppelklick gestartet, kann der Basisordner in einem Dialog gewählt werden.
Ist der Arbeitsordner noch nicht vorhanden, wird dieser erstellt, anderenfalls werden alle darin enthaltenen Links gelöscht und neu eingefügt.
Den Links wird zur besseren Übersicht (und um Namenskollisionen vorzubeugen) der relative Ordnerpfad vorangestellt.
Im Unterschied zu der von Dir beschriebenen Funktionalität werden keine Kopien von Dateien erstellt, sondern es können immer die Originaldateien bearbeitet werden. Dadurch entfällt auch das abschließende "Zurückkopieren"/Synchronisieren.
Grüße
bastla
Eine 1:1-Umsetzung der gewünschten Funktionalität habe ich zwar nicht anzubieten, aber was das "flattening" anlangt, könnte vielleicht der folgende VB-Script-Entwurf eine Alternative darstellen:
'FlattenToWorkDir.vbs
Const Arbeit = "Arbeit"
Set WshShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
If WScript.Arguments.Count > 0 Then
If fso.FolderExists(WScript.Arguments(0)) Then BasisPfad = WScript.Arguments(0)
End If
If BasisPfad = "" Then
Set Verzeichnis = CreateObject("Shell.Application") _
.BrowseForFolder(0, "Basisordner wählen", 16, 17)
If TypeName(Verzeichnis) = "Nothing" Then WScript.Quit(1)
Set Basis = Verzeichnis.Self
BasisPfad = Basis.Path
End If
BasisPfad = fso.GetFolder(BasisPfad).Path
If Right(BasisPfad, 1) = "\" Then BasisPfad = Left(BasisPfad, Len(BasisPfad) - 1)
ArbeitsPfad = BasisPfad & "\" & Arbeit
If fso.FolderExists(ArbeitsPfad) Then
On Error Resume Next
fso.DeleteFile(ArbeitsPfad & "\*.lnk")
On Error Goto 0
Else
fso.CreateFolder(ArbeitsPfad)
End If
DoSubFolders(fso.GetFolder(BasisPfad))
WScript.Echo "Verknüpfungen in Ordner " & Arbeitspfad & " erstellt."
WScript.Quit
Sub DoSubFolders(Ordner)
For Each Unterordner In Ordner.Subfolders
If LCase(Unterordner.Path) <> LCase(ArbeitsPfad) Then
RelPath = Replace(Unterordner.Path, BasisPfad, "")
If Left(RelPath, 1) = "\" Then RelPath = Mid(RelPath, 2)
RelName = Replace(RelPath, "\", "-")
For Each Datei In Unterordner.Files
Set objShellLink = WshShell.CreateShortcut(ArbeitsPfad & "\" & _
RelName & "_" & Datei.Name & ".lnk")
objShellLink.TargetPath = Datei.Path
objShellLink.Save
Next
DoSubFolders(Unterordner)
End If
Next
End Sub
Erstelle vom angegebenen Basis-Ordner ausgehend einen neuen Ordner "Arbeit" (Name definiert in "Const"-Zeile) und in diesem Arbeitsordner Links zu allen Dateien der Ordner unterhalb des Basisordners (noch ohne Einschränkung der Ordnertiefe).
Der Basisordner kann beim Aufruf des Scripts als Argument (um zB eine Verknüpfung für oft benötigte Basisordner zu erstellen) übergeben werden. Weiters ist es möglich, den Basisordner per Drag and Drop auf das Script zu ziehen. Wird das Script einfach per Doppelklick gestartet, kann der Basisordner in einem Dialog gewählt werden.
Ist der Arbeitsordner noch nicht vorhanden, wird dieser erstellt, anderenfalls werden alle darin enthaltenen Links gelöscht und neu eingefügt.
Den Links wird zur besseren Übersicht (und um Namenskollisionen vorzubeugen) der relative Ordnerpfad vorangestellt.
Im Unterschied zu der von Dir beschriebenen Funktionalität werden keine Kopien von Dateien erstellt, sondern es können immer die Originaldateien bearbeitet werden. Dadurch entfällt auch das abschließende "Zurückkopieren"/Synchronisieren.
Grüße
bastla
Moin Bastla,
mit dieser Strategie habe ich auch geliebäugelt (natürlich hätte ich das mit simplem Batch gemacht statt mit VBSkript).
Einziger nennenswerter Unterschied: Ich hätte mich für das "@" oder das "§"-Zeichen als Ersatz für den Backslash entschieden. Wegen der möglichen Probleme/Mehrdeutigkeiten beim Rückübersetzen.
Aber dann dachte ich - ähnlich wie Du es ja auch berücksichtigst - dass es nicht sinnvoll sein darf, auf/mit einer Kopie zu arbeiten. ("Es kann nur einen geben.., wie es so schön heißt.).
Meine Strategie wäre dann letzten Endes (im Batch), diese "neuen" Dateinamen, also z.B. "§Test§Sub§Ordner45§Datei.xyz" als Alias-Name für "\Test\Sub\Ordner45\Datei.xyz"
nur mit LinkD.exe (oder Konsorten) als verlinkte Datei in einem neuen Ordner bereitzustellen.
Also ein "echter" Dateilink statt eine Verknüpfung.
Somit würde definitiv immer auf dem Original gearbeitet werden.
Genau genommen habe ich mich nur zurückgehalten, weil ich Dir bei den exzellenten Erklärungen gerne den Vortritt lasse.
Grüße
Biber
mit dieser Strategie habe ich auch geliebäugelt (natürlich hätte ich das mit simplem Batch gemacht statt mit VBSkript).
Einziger nennenswerter Unterschied: Ich hätte mich für das "@" oder das "§"-Zeichen als Ersatz für den Backslash entschieden. Wegen der möglichen Probleme/Mehrdeutigkeiten beim Rückübersetzen.
Aber dann dachte ich - ähnlich wie Du es ja auch berücksichtigst - dass es nicht sinnvoll sein darf, auf/mit einer Kopie zu arbeiten. ("Es kann nur einen geben.., wie es so schön heißt.).
Meine Strategie wäre dann letzten Endes (im Batch), diese "neuen" Dateinamen, also z.B. "§Test§Sub§Ordner45§Datei.xyz" als Alias-Name für "\Test\Sub\Ordner45\Datei.xyz"
nur mit LinkD.exe (oder Konsorten) als verlinkte Datei in einem neuen Ordner bereitzustellen.
Also ein "echter" Dateilink statt eine Verknüpfung.
Somit würde definitiv immer auf dem Original gearbeitet werden.
Genau genommen habe ich mich nur zurückgehalten, weil ich Dir bei den exzellenten Erklärungen gerne den Vortritt lasse.
Grüße
Biber
@Biber
An Hardlinks hatte ich auch gedacht, da allerdings meines Wissens VBS keine native Unterstützung dafür bietet, zunächst der Versuch mit Softlinks - sollten eigentlich genügen (und sind vielleicht etwas leichter kommunizierbar ), oder was meinst Du?
Auch "-" oder "_" als Trennzeichen dürften für Durchschnittsbenutzer etwas weniger irritierend sein (und eine Rückwandlung ist ohnehin nicht erforderlich).
Grüße
bastla
... den Vortritt lasse.
Woher wusstest Du, dass ich an dem Thema nicht vorbeikomme? An Hardlinks hatte ich auch gedacht, da allerdings meines Wissens VBS keine native Unterstützung dafür bietet, zunächst der Versuch mit Softlinks - sollten eigentlich genügen (und sind vielleicht etwas leichter kommunizierbar ), oder was meinst Du?
Auch "-" oder "_" als Trennzeichen dürften für Durchschnittsbenutzer etwas weniger irritierend sein (und eine Rückwandlung ist ohnehin nicht erforderlich).
Grüße
bastla
@bastla
Hast durchaus recht... Deine Lösung reicht vollkommen aus...
Mit diesen "echten" verlinkten Dateien, die bei M$ immer noch nicht vernüftig unterstützt werden, hatte ich ja gewisse Hoffnungen in Vi$ta gesetzt...
...na ja... so viele Hoffnungen ja auch nicht. *seufz*
Wieso sollte auch ein Betriebssystem nach kaum 20 Jahren Entwicklungsarbeit so etwas jetzt schon können...
Also - keine Einwände gegen Deine Strategie.
Nachvollziehbar, wartbar, gratis, sofort einsetzbar und effizient - wer sollte da noch verbessern wollen?
Grüße
Biber
Hast durchaus recht... Deine Lösung reicht vollkommen aus...
Mit diesen "echten" verlinkten Dateien, die bei M$ immer noch nicht vernüftig unterstützt werden, hatte ich ja gewisse Hoffnungen in Vi$ta gesetzt...
...na ja... so viele Hoffnungen ja auch nicht. *seufz*
Wieso sollte auch ein Betriebssystem nach kaum 20 Jahren Entwicklungsarbeit so etwas jetzt schon können...
Also - keine Einwände gegen Deine Strategie.
Nachvollziehbar, wartbar, gratis, sofort einsetzbar und effizient - wer sollte da noch verbessern wollen?
Grüße
Biber
@Biber
Merci.
Zu Deinen/meinen obigen Überlegungen hinzu käme vielleicht auch, dass Softlinks einen eher "temporären" Charakter haben sowie weniger Disziplin vom Anwender (Stichwort "löschen") verlangen.
Grüße
bastla
Merci.
Zu Deinen/meinen obigen Überlegungen hinzu käme vielleicht auch, dass Softlinks einen eher "temporären" Charakter haben sowie weniger Disziplin vom Anwender (Stichwort "löschen") verlangen.
Grüße
bastla