Doppelte Dateinamen markieren

Aktuelle Version: 12.7 (23.11.2017)
Alles zum Thema Directory Opus
Antworten
josinoro
Beiträge: 166
Registriert: 4. Aug 2013 19:58
Version DOpus: Pro

Doppelte Dateinamen markieren

Beitrag von josinoro » 12. Jan 2016 19:26

Hallo Listlinge,

wie kann ich doppelte Dateinamen, genauer identischer Name mit unterschiedlicher Endung, markieren oder ausfiltern?

MfG

josinoro

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

Re: Doppelte Dateinamen markieren

Beitrag von tbone » 12. Jan 2016 19:41

Wenn schon eine/mehrere Dateien markiert sind, hilft:
Select SIMILARBASE

Ohne existierende Markierung, alle die markieren, die ein oder mehrere "SideCars" haben, braucht ein Script.
Das habe ich aber, glaube ich, im Nähkästchen.

josinoro
Beiträge: 166
Registriert: 4. Aug 2013 19:58
Version DOpus: Pro

Re: Doppelte Dateinamen markieren

Beitrag von josinoro » 14. Jan 2016 15:56

Hallo tbone,

danke für die, wie immer schnelle, Antwort.

Das hilft mir schon mal weiter. Nun kann ich zum Beispiel über die Befehle
    1. Filter alle *.flac-Dateien ausfiltern
    • Alle Dateien markieren
    • Filter ausschalten
    • Select SIMILARBASE ausführen
    • Demarkierte Dateien ausblenden
    • Filter alle *.mp3-Dateien ausfiltern
alle *.mp3-Dateien ermitteln, von denen es gleichnamige Dateien mit der Endung *.flac gibt.

Wenn man das jetzt noch automatisieren könnte, wäre das ein Traum. Dazu müsste man in irgendeiner Form die zwei Dateiendungen benennen. Entweder über ein Eingabefeld oder idealerweise aus einer Liste, die alle im aktuellen Verzeichnis verwendeten Endungen auflistet. Als Ergebnis sollten dann alle zweitbenannten oder optional alle erstbenannten Dateien markiert werden.

MfG

josinoro

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

Re: Doppelte Dateinamen markieren

Beitrag von tbone » 14. Jan 2016 17:31

alle *.mp3-Dateien ermitteln, von denen es gleichnamige Dateien mit der Endung *.flac gibt.
Na sag das doch gleich.. o)

Das ist das bereits erwähnte Nähkästchen-Script namens "EasyFilter". Es ist generisch, somit geeignet für multiple Anwendungen und lässt sich relativ leicht anpassen indem man die Funktionen Pre/MainFilter etc. oberhalb des Codes "justiert". Es selektiert nun alle *.mp3s die ein *.flac SideCar haben. Die Dateiendungen vor Ausführung abzufragen.. kriegst Du vll alleine hin?

Code: Alles auswählen

@script jscript
////////////////////////////////////////////////////////////////////////////////
var PreFilter = function( file ){
	//return true if this file(type) is of interest in the process
	var extensions = ".mp3.flac";
	if (extensions.indexOf(file.ext)>-1) return true;
}
////////////////////////////////////////////////////////////////////////////////
var MainFilter = function( file ){
	//return true to run evaluation on this specific file(type)
	if (file.ext==".mp3") return true;
}
////////////////////////////////////////////////////////////////////////////////
var Evaluate = function( file ){
	//return true to execute the foreach-operation on this file (select, delete etc.)
	var flcVariant = this.FileExists(file.baseName.esc()+'\.flac');
	if (flcVariant){
		return true;
	}
}
////////////////////////////////////////////////////////////////////////////////
var ExecuteForEach = function( file ){
	//execute for each file that passed evaluation
	this.cmd.RunCommand('Select "'+file.name+'" EXACT');
} 
////////////////////////////////////////////////////////////////////////////////
var ExecuteForAll = function(){
	//execute finally
	this.cmd.RunCommand('SelectEx MAKEVISIBLE');
} 
////////////////////////////////////////////////////////////////////////////////
function EasyFilter(filesIn,cmd,preFilter,mainFilter,evaluate,executeForEach,executeForAll){
	this.version		= 0.1;
	this.files			= [];
	this.filesFiltered	= [];
	this.filesEvaluated	= [];
	this.cmd			= cmd;
	this.PreFilter		= preFilter;
	this.MainFilter		= mainFilter;
	this.Evaluate		= evaluate;
	this.ExecuteForEach	= executeForEach;
	this.ExecuteForAll	= executeForAll;
	////////////////////////////////////////////////////////////////////////////
	String.prototype.esc = function(str){
		return this.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
	}
	////////////////////////////////////////////////////////////////////////////
	this.FileExists = function( fileNameRegex ){
		fileNameRegex = new RegExp(fileNameRegex);
		for(var i=0;i<this.files.length;i++){
			if (this.files[i].name.search(fileNameRegex)!=-1)
				return this.files[i];
		}
		return null;
	}
	////////////////////////////////////////////////////////////////////////////
	DOpus.Output("PreFiltering ["+filesIn.length+"] files..");
	for(var i=0;i<filesIn.length;i++){
		if (this.PreFilter(filesIn[i])===true){
			this.files[this.files.length] = filesIn[i];
			DOpus.Output("    PreFilter passed ["+filesIn[i].name+"]");
		} else {
			//DOpus.Output("    PreFilter ignore ["+filesIn[i].name+"]");
		}
	}
	DOpus.Output("");
	////////////////////////////////////////////////////////////////////////////
	DOpus.Output("MainFiltering ["+this.files.length+"] files..");
	for(var i=0;i<this.files.length;i++){
		if (this.MainFilter(this.files[i])===true){
			DOpus.Output("    MainFilter passed ["+this.files[i].name+"]");
			this.filesFiltered[this.filesFiltered.length] = this.files[i];
		} else {
			//DOpus.Output("    MainFilter ignore ["+filesIn[i].name+"]");
		}
	}
	DOpus.Output("");
	////////////////////////////////////////////////////////////////////////////
	DOpus.Output("Evaluating ["+this.filesFiltered.length+"] files..");
	for(var i=0;i<this.filesFiltered.length;i++){
		if (this.Evaluate(this.filesFiltered[i])===true){
			DOpus.Output("    Evaluation passed ["+this.filesFiltered[i].name+"]");
			this.filesEvaluated[this.filesEvaluated.length] = this.filesFiltered[i];
		} else {
			//DOpus.Output("    Evaluation ignore ["+this.filesFiltered[i].name+"]");
		}
	}
	DOpus.Output("");
	////////////////////////////////////////////////////////////////////////////
	DOpus.Output("Processing ["+this.filesEvaluated.length+"] files..");
	for(var i=0;i<this.filesEvaluated.length;i++){
		DOpus.Output("    Running ForEachOp ["+this.filesEvaluated[i].name+"]");
		this.ExecuteForEach(this.filesEvaluated[i]);
	}
	DOpus.Output("");
	////////////////////////////////////////////////////////////////////////////
	DOpus.Output("Running ForAll-Operation..");
	this.ExecuteForAll();
	DOpus.Output("");
}
////////////////////////////////////////////////////////////////////////////////
function OnClick(data){
	var filesTab = data.func.sourcetab.files, files = [];
	var cmd = data.func.command; cmd.ClearFiles();
	////////////////////////////////////////////////////////////////////////////
	for(var i=0;i<filesTab.count;i++){
		var file = {	name		: String(filesTab(i).name).toLowerCase(),
						baseName	: String(filesTab(i).name_stem).toLowerCase(),
						ext			: String(filesTab(i).ext).toLowerCase() };
		files[files.length] = file;
	}
	var filter = new EasyFilter(files,cmd,PreFilter,MainFilter,Evaluate,ExecuteForEach,ExecuteForAll);
	DOpus.Output("Done.");
}

josinoro
Beiträge: 166
Registriert: 4. Aug 2013 19:58
Version DOpus: Pro

Re: Doppelte Dateinamen markieren

Beitrag von josinoro » 14. Jan 2016 18:49

Hallo tbone,

vielen herzlichen Dank.

Nachdem ich dein Kommando SelectEx (https://resource.dopus.com/viewtopic.php?f=35&t=24414) eingebunden habe, funktioniert das tadellos. Das "Ding" muss ich mir aber noch genauer ansehen. Wow - Hut ab.

Was die Abfrage der Dateiendungen angeht, muss ich mal bei anderen Scripten klauen.

MfG

josinoro

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

Re: Doppelte Dateinamen markieren

Beitrag von tbone » 14. Jan 2016 21:58

Bitte gern. o) Tut mir leid, "SelectEx" hatte ich übersehen. Das Kommando ist aber optional, wie angewendet scrollt es nur die Elemente in den "View". Die Zeile kann man notfalls auskommentieren, aber nun hastes ja schon installiert, schadet nicht! o)

Die Dateiendungen abzufragen, ergibt das Sinn? U.U. sind thematisch vorbereitete Knöpfe einfacher. Ich habe mittlerweile so Menü-Knöpfe zur Arbeit mit Audio- oder Video-Dateien angelegt und pflege keine wild gemixten Toolbars mehr. Diesen Knopf würde ich also eher ins "Audio" Menü verschieben. Ich finde, das ist oft einfacher wiederzufinden und anzuwenden.

Solltest Du dennoch eine Art Abfrage für die Dateitypen brauchen und selbst keine Idee zum "wie" haben, gib Bescheid.

josinoro
Beiträge: 166
Registriert: 4. Aug 2013 19:58
Version DOpus: Pro

Re: Doppelte Dateinamen markieren

Beitrag von josinoro » 17. Jan 2016 17:31

Hallo tbone,

nun habe ich zwei Scripte von dir versucht zusammenzuführen, bin aber kläglich gescheitert. Einmal verwende ich die Videosuche und das letzte von dir hier zur Verfügung gestellte Script.

Code: Alles auswählen

//files must have UTF-16-LE encoding
@script jscript
//var FILENAME  	= "E:\\Directory Opus\\Suchliste.txt";
//var LOCATIONS 	= "E:\\Directory Opus\\Suchort.txt";

//var FILENAME	= DOpus.FSUtil.resolve("/dopusdata\\Suche\\Suchliste.txt");
//var LOCATIONS	= DOpus.FSUtil.resolve("/dopusdata\\Suche\\Suchort.txt");

var FILENAME	= DOpus.aliases("dopusdata").path + "\\Suche\\Suchliste.txt";
var LOCATIONS	= DOpus.aliases("dopusdata").path + "\\Suche\\Suchort.txt";
   
///////////////////////////////////////////////////////////////////////////////
function OnClick(data){
    var searchme1 = new Dropdown().
                    Load(FILENAME).
                    Show("Dateityp 1 auswählen", "Dateityp");
    var searchme2 = new Dropdown().
                    Load(FILENAME).
                    Show("Dateityp 2 auswählen", "Dateityp");
    if (!searchme1||!searchme2) return;
	
    DOpus.Output("Auswahl: " + searchme1 + "   " + searchme2);
}
///////////////////////////////////////////////////////////////////////////////
function Dropdown(){
    this.filepath   = "";
    this.vector     = DOpus.Create.Vector();
    this.win        = null;
    ///////////////////////////////////////////////////////////////////////////
    this.FileToVector = function(filepath){
        var fso     = new ActiveXObject("Scripting.FileSystemObject");
        var file    = fso.OpenTextFile(filepath, 1, true, -1);
        var v       = DOpus.Create.Vector();
        while (!file.AtEndOfStream) v.push_back(file.ReadLine());
        file.Close();
        return v;
    }
    ///////////////////////////////////////////////////////////////////////////
    this.CreateDialog = function(vector, text, title, sort){
        var dlg         = DOpus.Dlg;
        dlg.window      = (this.win?this.win:null);
        dlg.title       = title || "";
        dlg.message     = text || "Select:";
        dlg.buttons     = "Ok|Cancel";
        dlg.icon        = "question";
        dlg.choices     = vector;
        dlg.sort        = sort || true;
      	dlg.selection   = 0;
        return dlg;
    }
    ///////////////////////////////////////////////////////////////////////////
    this.Show = function(text, title, sort){
        var dlg = this.CreateDialog(this.vector, text, title, sort);
        var result = dlg.Show();
        if (!result) return false;
        if (dlg.selection==-1) return "";
        return dlg.choices(dlg.selection);
    }
    ///////////////////////////////////////////////////////////////////////////
    this.Load = function(filepath){
        this.filepath = filepath;
        this.vector = this.FileToVector(filepath);
        return this;
    }
}
///////////////////////////////////////////////////////////////////////////////
function FileToArray (filepath){
    var fso     = new ActiveXObject("Scripting.FileSystemObject");
    var file    = fso.OpenTextFile(filepath, 1, true, -1);
    var a       = [];
    while (!file.AtEndOfStream) a[a.length] = file.ReadLine();
    file.Close();
    return a;
}

// ***********************************************************************************


////////////////////////////////////////////////////////////////////////////////
var PreFilter = function( file ){
   //return true if this file(type) is of interest in the process
   var extensions = searchme1+searchme2;
   if (extensions.indexOf(file.ext)>-1) return true;
}
////////////////////////////////////////////////////////////////////////////////
var MainFilter = function( file ){
   //return true to run evaluation on this specific file(type)
   if (file.ext==searchme1) return true;
}
////////////////////////////////////////////////////////////////////////////////
var Evaluate = function( file ){
   //return true to execute the foreach-operation on this file (select, delete etc.)
   var flcVariant = this.FileExists(file.baseName.esc()+'\searchme2');
   if (flcVariant){
      return true;
   }
}
////////////////////////////////////////////////////////////////////////////////
var ExecuteForEach = function( file ){
   //execute for each file that passed evaluation
   this.cmd.RunCommand('Select "'+file.name+'" EXACT');
}
////////////////////////////////////////////////////////////////////////////////
var ExecuteForAll = function(){
   //execute finally
   this.cmd.RunCommand('SelectEx MAKEVISIBLE');
}
////////////////////////////////////////////////////////////////////////////////
function EasyFilter(filesIn,cmd,preFilter,mainFilter,evaluate,executeForEach,executeForAll){
   this.version      = 0.1;
   this.files         = [];
   this.filesFiltered   = [];
   this.filesEvaluated   = [];
   this.cmd         = cmd;
   this.PreFilter      = preFilter;
   this.MainFilter      = mainFilter;
   this.Evaluate      = evaluate;
   this.ExecuteForEach   = executeForEach;
   this.ExecuteForAll   = executeForAll;
   ////////////////////////////////////////////////////////////////////////////
   String.prototype.esc = function(str){
      return this.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
   }
   ////////////////////////////////////////////////////////////////////////////
   this.FileExists = function( fileNameRegex ){
      fileNameRegex = new RegExp(fileNameRegex);
      for(var i=0;i<this.files.length;i++){
         if (this.files[i].name.search(fileNameRegex)!=-1)
            return this.files[i];
      }
      return null;
   }
   ////////////////////////////////////////////////////////////////////////////
   DOpus.Output("PreFiltering ["+filesIn.length+"] files..");
   for(var i=0;i<filesIn.length;i++){
      if (this.PreFilter(filesIn[i])===true){
         this.files[this.files.length] = filesIn[i];
         DOpus.Output("    PreFilter passed ["+filesIn[i].name+"]");
      } else {
         //DOpus.Output("    PreFilter ignore ["+filesIn[i].name+"]");
      }
   }
   DOpus.Output("");
   ////////////////////////////////////////////////////////////////////////////
   DOpus.Output("MainFiltering ["+this.files.length+"] files..");
   for(var i=0;i<this.files.length;i++){
      if (this.MainFilter(this.files[i])===true){
         DOpus.Output("    MainFilter passed ["+this.files[i].name+"]");
         this.filesFiltered[this.filesFiltered.length] = this.files[i];
      } else {
         //DOpus.Output("    MainFilter ignore ["+filesIn[i].name+"]");
      }
   }
   DOpus.Output("");
   ////////////////////////////////////////////////////////////////////////////
   DOpus.Output("Evaluating ["+this.filesFiltered.length+"] files..");
   for(var i=0;i<this.filesFiltered.length;i++){
      if (this.Evaluate(this.filesFiltered[i])===true){
         DOpus.Output("    Evaluation passed ["+this.filesFiltered[i].name+"]");
         this.filesEvaluated[this.filesEvaluated.length] = this.filesFiltered[i];
      } else {
         //DOpus.Output("    Evaluation ignore ["+this.filesFiltered[i].name+"]");
      }
   }
   DOpus.Output("");
   ////////////////////////////////////////////////////////////////////////////
   DOpus.Output("Processing ["+this.filesEvaluated.length+"] files..");
   for(var i=0;i<this.filesEvaluated.length;i++){
      DOpus.Output("    Running ForEachOp ["+this.filesEvaluated[i].name+"]");
      this.ExecuteForEach(this.filesEvaluated[i]);
   }
   DOpus.Output("");
   ////////////////////////////////////////////////////////////////////////////
   DOpus.Output("Running ForAll-Operation..");
   this.ExecuteForAll();
   DOpus.Output("");
}
////////////////////////////////////////////////////////////////////////////////
function OnClick(data){
   var filesTab = data.func.sourcetab.files, files = [];
   var cmd = data.func.command; cmd.ClearFiles();
   ////////////////////////////////////////////////////////////////////////////
   for(var i=0;i<filesTab.count;i++){
      var file = {   name      : String(filesTab(i).name).toLowerCase(),
                  baseName   : String(filesTab(i).name_stem).toLowerCase(),
                  ext         : String(filesTab(i).ext).toLowerCase() };
      files[files.length] = file;
   }
   var filter = new EasyFilter(files,cmd,PreFilter,MainFilter,Evaluate,ExecuteForEach,ExecuteForAll);
   DOpus.Output("Done.");
}
Die beiden Dateiendungen packe ich in die Variablen searchme1 und searchme2.
An der Übergabe an die anderen Funktionen komme ich nicht weiter.

MfG

josinoro

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast