Ordnername > Variable > String bearbeiten << geht sowas mit DOpus Scripting?

Aktuelle Version: 12.7 (23.11.2017)
Alles zum Thema Directory Opus
Antworten
Mecum
Beiträge: 101
Registriert: 13. Dez 2008 13:34
Betriebssystem: Windows 7 Pro
Produkt: DOpus 11
Version DOpus: Pro

Ordnername > Variable > String bearbeiten << geht sowas mit DOpus Scripting?

Beitrag von Mecum » 7. Okt 2015 17:35

Weil mir immer wieder neue Sachen einfallen, die das Leben leicher machen würden, wollt ich mal anfragen, ob folgendes ohne VBScripting hinzubekommen ist:

Ich möchte einen Teil eines Parent-Parent-Directory Namen in eine Variable stecken, diesen Teil dann im markierten Directorynamen suchen und durch den Inhalt der String-Variable ersetzen, da derjenige Teil im Parent-Parent-Verzeichnis eine andere Gross-Klein-Schreibweise hat. In diesem Beispiel also den Teil "Max von Mueller" in "MAX von MUELLER" umbenennen.

Ausgangslage Ordnerstruktur:

Code: Alles auswählen

+ ..... MAX von MUELLER - POOL
   Fotos
      Max von Mueller - Sonnenaufgaenge
      Max von Mueller - Weizenacker
   Videos
   Dokumente
      Max von Mueller - Angebot Tiefschnee
      Max von Mueller - Gedichte
Gewünschtes Resultat:

Code: Alles auswählen

+ ..... MAX von MUELLER - POOL
   Fotos
      MAX von MUELLER - Sonnenaufgaenge
      MAX von MUELLER - Weizenacker
   Videos
   Dokumente
      MAX von MUELLER - Angebot Tiefschnee
      MAX von MUELLER - Gedichte
Was ich suche ist also eine einfache Möglichkeit, den Directorynamen

Code: Alles auswählen

"D:\Kunden\Max von Mueller\+ ..... MAX von MUELLER - POOL\Fotos\Max von Mueller - Weizenacker"
zu markieren und per Button in

Code: Alles auswählen

"D:\Kunden\Max von Mueller\+ ..... MAX von MUELLER - POOL\Fotos\MAX von MUELLER - Weizenacker"
umzubenennen.

Ist mit DOpus Stringbearbeitung überhaupt möglich (ich habe noch nichts in den Anleitungen gefunden was zb einem String.Trim ähnlich ist)?

Vielen Dank für jeden Tip
Mecum

Benutzeravatar
tbone
Berater
Beiträge: 405
Registriert: 22. Nov 2014 21:16
Betriebssystem: 7*64
Produkt: aktuelle Beta-Version
Version DOpus: Pro

Re: Ordnername > Variable > String bearbeiten << geht sowas mit DOpus Scripting?

Beitrag von tbone » 7. Okt 2015 18:57

Das ginge wohl mit Code, aber ist das nicht etwas, das auch mit dem eingebauten Rename funktionieren sollte?
Ich denke da insbesondere an die Find-and-Replace Funktion - hast Du es damit schon probiert?

Wenn es über einen einzigen Button-Klick funktionieren soll, könnte man ein Kommando bauen, dass erst nach dem zu suchenden String fragt, dann nach dem Ersatz-String und schließlich RENAME mit RECURSE und FINDREP aufruft.

Trimmen, Upper- und LowerCasen kannst Du ohne weiteres in VB oder JScript. Sowas ist eher Funktionalität der jeweiligen Script-Sprache und daher nicht in der DO-Doku zu finden. Bei sowas hilft Dir aber eine reguläre Internetsuche weiter wie z.B.: https://duckduckgo.com/?q=jscript+trim (beachte dabei, dass JScript nicht 100%ig identisch zu Javascript ist). Im speziellen Fall von String.trim(), ist es für JScript nur über eigene Funktionen bzw. einer Erweiterung des String-Prototypen möglich: http://www.codingforums.com/javascript- ... cript.html

Interne Kommandos, wie das genante "RENAME", kannst Du im Normalfall mit Scripting kombinieren - wenn Du dazu Hilfe brauchst, lass hören.

Mecum
Beiträge: 101
Registriert: 13. Dez 2008 13:34
Betriebssystem: Windows 7 Pro
Produkt: DOpus 11
Version DOpus: Pro

Re: Ordnername > Variable > String bearbeiten << geht sowas mit DOpus Scripting?

Beitrag von Mecum » 7. Okt 2015 20:09

Ok, vielen Dank.

Da das ja etwas ist, das immer wieder vorkommt und deshalb automatisiert ablaufen sollte, werde ich mal schauen, wie ich das mit JScript realisieren kann. Danke erstmal für die Info, ich meld mich vllt später wieder.

LG, Mecum

Benutzeravatar
Kundal
Moderator
Beiträge: 1341
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Ordnername > Variable > String bearbeiten << geht sowas mit DOpus Scripting?

Beitrag von Kundal » 7. Okt 2015 21:09

Mit Bordmitteln wäre das im einfachsten Fall z.B. so zu machen:

Code: Alles auswählen

@dirsonly 
Select ALL
Rename PATTERN ".*( -.*)" TO "{parent2}\1" FILEINFO REGEXP 
Rename PATTERN ".{8}(.*.)-.*(-.*)" TO \1\2 REGEXP
Wenn du dich im Ordner Fotos befindest werden alle darin enthaltenen Ordner markiert und der erste Teil (alles vor Leerstelle+Minuszeichen) wird mit Hilfe der ersten Zeile zunächst mit dem vollen Namen des Parent2-Ordners (+ ..... MAX von MUELLER - POOL) umbenannt. Die zweite Zeile entfernt dann daraus die unerwünschten Teile (8 Zeichen am Anfang und alles ab dem Minuszeichen). Die zweite Hälfte des ursprünglichen Namens bleibt jeweils erhalten.
Der reguläre Ausdruck in Zeile 2 ist sicher stümperhaft, da bin ich einfach nicht so der Held.

Mecum
Beiträge: 101
Registriert: 13. Dez 2008 13:34
Betriebssystem: Windows 7 Pro
Produkt: DOpus 11
Version DOpus: Pro

Re: Ordnername > Variable > String bearbeiten << geht sowas mit DOpus Scripting?

Beitrag von Mecum » 7. Okt 2015 23:57

Der Anstaz mit

Code: Alles auswählen

Rename PATTERN ".*( -.*)" TO "{parent2}\1" FILEINFO REGEXP
wäre wohl der einfachste, wenn man noch herausfinden könnte, wie man im Falle mehrerer Trennstriche NUR den ersten Teil des markierten Ordnernamens, also alles bis zum ersten "-" (Minuszeichen) ersetzen könnte.

Wenn der ursprüngliche Ordnername zB "Max von Mueller - Konversation (Anna - Beta - Gamma)" ist, dann ist das Resultat mit dem derzeitigen Code "MAX von MUELLER - Gamma)". Leider ist die einzige Konstante in diesem Szenario, auf die man sich stets verlassen kann, diejenige, dass es immer einen ersten Teilstring " - " (also Leerzeichen Minuszeichen Leerzeichen) gibt, der als Marker benutzt werden könnte, aber unter Umständen im restlichen Namen noch weitere " - " auftauchen können. Ich versuch mich morgen mal ein bisschen intensiver mit den Regular Expressions auseinanderzusetzen.

Danke für den Ansatz.

Benutzeravatar
tbone
Berater
Beiträge: 405
Registriert: 22. Nov 2014 21:16
Betriebssystem: 7*64
Produkt: aktuelle Beta-Version
Version DOpus: Pro

Re: Ordnername > Variable > String bearbeiten << geht sowas mit DOpus Scripting?

Beitrag von tbone » 8. Okt 2015 03:28

Damit ich nicht einroste, hier mein Vorschlag zur Lösung. o)

Der interne Rename-Befehl unterstützt leider kein RECURSE wenn es um Verzeichnisse geht. o(
Daher habe ich das bestehende "RenameEx" ScriptCommand um einen RECURSE Modus erweitert.
Folgender Button (als Script-Function anlegen) extrahiert erstmal aus dem aktuellen Verzeichnisnamen den 1. Teil und verwendet diesen dann beim rekursiven Umbenennen mittels "RenameEx". Den Button solltest Du direkt in "..\MAX von MUELLER - POOL" drücken und nicht weiter unten/oben.

Bitte erst an Testdaten versuchen! Bei mir hat's hingehauen, aber ich kenne Deine genauen Strukturen nicht.
Der Code ist ein bisschen aufgeblasen durch die Kommentare, geht auch als 3-Zeiler, aber macht so hoffentlich klarer was passiert.
In der DOpus-Konsole kannst Du die einzelnen Rename-Befehle einsehen und auch einzeln testen, wenn Du den "SafeMode" aktivierst.

Code: Alles auswählen

@script jscript

//two regexp groups in this regex
//"MAX von MUELLER - POOL"
//  -> Group1: "MAX von MUELLER"
//  -> Group2: " - POOL"
var regExp = "(.*?)( - .*)";

//safemode
var safemode = false;

function OnClick(data){
	var f=data.func, cmd=f.command, tab=f.sourcetab, path=tab.path;
	
	//regexp-replace trick to extract group #1 from the current foldername
	//"MAX von MUELLER - POOL" -> "MAX von MUELLER"
	var group1 = (tab.path.filepart+"").replace( new RegExp(regExp),"$1");
	
	DOpus.Output("Group #1 [" + group1 + "]");

	//reusing the regexp for the recursive rename operation
	//group #1 will be replaced with what we extracted from the foldername
	//group #2 will simply be reused and inserted as it is
	cmd.RunCommand('RenameEx RECURSE REGEXP PATTERN="'+regExp+'" TO="'+group1+'\\2" XLOG=a TYPE=dirs ' + (safemode?' SAFEMODE':''));
}
Das ScriptCommand "RenameEx" nach "/dopusdata/script addins" kopieren (besser vorher die *.txt Endung entfernen):
Command.Generic_RenameEx.js.txt
v0.3 / 2015.10.08 - RECURSE feature added
(51.85 KiB) 37-mal heruntergeladen

Benutzeravatar
Kundal
Moderator
Beiträge: 1341
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Ordnername > Variable > String bearbeiten << geht sowas mit DOpus Scripting?

Beitrag von Kundal » 8. Okt 2015 05:29

Zu deiner Frage zu regulären Ausdrucken: Das Folgende funktioniert für deine Beispiele. Das Fragezeichen in der ersten Rename-Zeile macht den Ausdruck "non-greedy", so daß alles nach dem ersten Minuszeichen erhalten bleibt. Für die zweite Zeile ist dann allerdings Bedingung, daß Prefix und Suffix immer die gleiche Anzahl Zeichen haben (Prefix=8, Suffix=6). Universeller und rekursiv, wie in tbone's Beipiel, geht es nur mit einem Script.

Code: Alles auswählen

@dirsonly
Select ALL
Rename PATTERN ".*?( -.*)" TO "{parent2}\1" FILEINFO REGEXP
Rename PATTERN ".{8}(.*.)-.{6}(-.*)" TO \1\2 REGEXP
@tbone:
Dein Script funktioniert bei mir super. Allerdings hast du anscheinend übersehen, dass der Name des Parent2-Ordners 3-teilig ist (+ ..... MAX von MUELLER - POOL). Um also auch den Prefix zu entfernen muss Zeile 7 im Buttoncode so aussehen:

Code: Alles auswählen

var regExp = ".{8}(.*?)( - .*)";

Benutzeravatar
tbone
Berater
Beiträge: 405
Registriert: 22. Nov 2014 21:16
Betriebssystem: 7*64
Produkt: aktuelle Beta-Version
Version DOpus: Pro

Re: Ordnername > Variable > String bearbeiten << geht sowas mit DOpus Scripting?

Beitrag von tbone » 8. Okt 2015 06:08

Moin Kundal! o)

Ja, habe ich übersehen, bzw. nicht verstanden! o)
Ich dachte "+ ..... " soll bedeuten, ja was eigentlich.. der Pfad zum Verzeichnis vielleicht? o)

@Mecum
Sollte es mit Kundals Verbesserung nicht funktionieren, gib doch nochmal ein klares Beispiel für einen dieser übergeordneten Foldernamen.

Mecum
Beiträge: 101
Registriert: 13. Dez 2008 13:34
Betriebssystem: Windows 7 Pro
Produkt: DOpus 11
Version DOpus: Pro

Re: Ordnername > Variable > String bearbeiten << geht sowas mit DOpus Scripting?

Beitrag von Mecum » 8. Okt 2015 06:30

Guten Morgen ihr beiden^^.

Vielen Dank für eure Varianten, funktionieren perfekt, und den non-greedy-character konnte ich auf der Microsoft Seite nachlesen und verstehen.

Danke für die Erklärungen tbone, sowas hilft sehr stark, Code besser zu verstehen, und va auch danke, dass du mitten in der Nacht mal kurz dein RenameEx-Script angepasst hast.

Letzedlich tut es gut, zwei Versionen zu haben, eine für selektives Umbenennen *vor Ort* und eine für Batchrenaming (die, wenn ich das ganze auch mal mit dem RenamEx-Script ein wenig besser vertehe, sicher noch für einiges andere anwendbar ist).

Working things make Mecum smile...^^

edit:
@tbone, das "+ ..... " steht deshalb manchen Folden vor, damit diese ganz oben in der Ordnerstruktur zu finden sind.
Ein klassischer Pfad hier wäre zB:

Code: Alles auswählen

"D:\Kunden\Max von Mueller\+ ..... MAX von MUELLER - POOL\Fotos\Max von Mueller - Weizenacker"

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast