Doppelte Dateinamen markieren
Doppelte Dateinamen markieren
Hallo Listlinge,
wie kann ich doppelte Dateinamen, genauer identischer Name mit unterschiedlicher Endung, markieren oder ausfiltern?
MfG
josinoro
wie kann ich doppelte Dateinamen, genauer identischer Name mit unterschiedlicher Endung, markieren oder ausfiltern?
MfG
josinoro
- tbone
- Berater
- Beiträge: 495
- Registriert: 22. Nov 2014 21:16
- Betriebssystem: 7*64
- Produkt: aktuelle Beta-Version
- Version DOpus: Pro
Re: Doppelte Dateinamen markieren
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.
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.
Re: Doppelte Dateinamen markieren
Hallo tbone,
danke für die, wie immer schnelle, Antwort.
Das hilft mir schon mal weiter. Nun kann ich zum Beispiel über die Befehle
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
danke für die, wie immer schnelle, Antwort.
Das hilft mir schon mal weiter. Nun kann ich zum Beispiel über die Befehle
- Filter alle *.flac-Dateien ausfiltern
- Alle Dateien markieren
- Filter ausschalten
- Select SIMILARBASE ausführen
- Demarkierte Dateien ausblenden
- Filter alle *.mp3-Dateien ausfiltern
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
- tbone
- Berater
- Beiträge: 495
- Registriert: 22. Nov 2014 21:16
- Betriebssystem: 7*64
- Produkt: aktuelle Beta-Version
- Version DOpus: Pro
Re: Doppelte Dateinamen markieren
Na sag das doch gleich.. o)alle *.mp3-Dateien ermitteln, von denen es gleichnamige Dateien mit der Endung *.flac gibt.
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.");
}
Re: Doppelte Dateinamen markieren
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
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
- tbone
- Berater
- Beiträge: 495
- Registriert: 22. Nov 2014 21:16
- Betriebssystem: 7*64
- Produkt: aktuelle Beta-Version
- Version DOpus: Pro
Re: Doppelte Dateinamen markieren
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.
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.
Re: Doppelte Dateinamen markieren
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.
Die beiden Dateiendungen packe ich in die Variablen searchme1 und searchme2.
An der Übergabe an die anderen Funktionen komme ich nicht weiter.
MfG
josinoro
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.");
}
An der Übergabe an die anderen Funktionen komme ich nicht weiter.
MfG
josinoro