Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Script gesucht zum Auflösen und Wiederherstellen von Ordner-Hierachien

Frage Entwicklung Batch & Shell

Mitglied: phatair

phatair (Level 1) - Jetzt verbinden

14.06.2007, aktualisiert 16.06.2007, 4464 Aufrufe, 5 Kommentare

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ß
Mitglied: bastla
15.06.2007 um 21:13 Uhr
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:
01.
'FlattenToWorkDir.vbs 
02.
Const Arbeit = "Arbeit" 
03.
 
04.
Set WshShell = WScript.CreateObject("WScript.Shell") 
05.
Set fso = CreateObject("Scripting.FileSystemObject") 
06.
If WScript.Arguments.Count > 0 Then 
07.
    If fso.FolderExists(WScript.Arguments(0)) Then BasisPfad = WScript.Arguments(0) 
08.
End If 
09.
If BasisPfad = "" Then 
10.
    Set Verzeichnis = CreateObject("Shell.Application") _ 
11.
        .BrowseForFolder(0, "Basisordner wählen", 16, 17) 
12.
    If TypeName(Verzeichnis) = "Nothing" Then WScript.Quit(1) 
13.
    Set Basis = Verzeichnis.Self 
14.
    BasisPfad = Basis.Path 
15.
End If 
16.
BasisPfad = fso.GetFolder(BasisPfad).Path 
17.
If Right(BasisPfad, 1) = "\" Then BasisPfad = Left(BasisPfad, Len(BasisPfad) - 1) 
18.
ArbeitsPfad = BasisPfad & "\" & Arbeit 
19.
If fso.FolderExists(ArbeitsPfad) Then 
20.
	On Error Resume Next 
21.
	fso.DeleteFile(ArbeitsPfad & "\*.lnk") 
22.
	On Error Goto 0 
23.
Else 
24.
	fso.CreateFolder(ArbeitsPfad) 
25.
End If 
26.
 
27.
DoSubFolders(fso.GetFolder(BasisPfad)) 
28.
WScript.Echo "Verknüpfungen in Ordner " & Arbeitspfad & " erstellt." 
29.
WScript.Quit 
30.
 
31.
Sub DoSubFolders(Ordner) 
32.
For Each Unterordner In Ordner.Subfolders 
33.
	If LCase(Unterordner.Path) <> LCase(ArbeitsPfad) Then 
34.
		RelPath = Replace(Unterordner.Path, BasisPfad, "") 
35.
		If Left(RelPath, 1) = "\" Then RelPath = Mid(RelPath, 2) 
36.
		RelName = Replace(RelPath, "\", "-") 
37.
		For Each Datei In Unterordner.Files 
38.
			Set objShellLink = WshShell.CreateShortcut(ArbeitsPfad & "\" & _ 
39.
      			 RelName & "_" & Datei.Name & ".lnk") 
40.
			objShellLink.TargetPath = Datei.Path 
41.
			objShellLink.Save 
42.
		Next 
43.
		DoSubFolders(Unterordner) 
44.
	End If 
45.
Next 
46.
End Sub
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
Bitte warten ..
Mitglied: Biber
15.06.2007 um 22:49 Uhr
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
Bitte warten ..
Mitglied: bastla
15.06.2007 um 23:17 Uhr
@Biber
... 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
Bitte warten ..
Mitglied: Biber
16.06.2007 um 00:27 Uhr
@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
Bitte warten ..
Mitglied: bastla
16.06.2007 um 00:41 Uhr
@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
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Script zum Auflösen einer Ordnerstruktur und zurück gesucht (12)

Frage von websolutions zum Thema Batch & Shell ...

VB for Applications
gelöst VB Script rekursiv statt nur ein Ordner (4)

Frage von Saschaaaaa zum Thema VB for Applications ...

Festplatten, SSD, Raid
RAID 1 auflösen und notfalls wiederherstellen (5)

Frage von mirandaveracruz zum Thema Festplatten, SSD, Raid ...

Batch & Shell
gelöst Per Script Ordner überwachen und Prog. ausfühern (9)

Frage von Knuefi zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (29)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (20)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...