removing repeating name patterns with batch rename method?
This is a tricky one.
I need to remove repeating patterns
Say i have a number of files with common repeating text patterns in the filename.
For instance:
filename_abc_123
filename_def_123
filename_ghi_456
The output should be
filename_abc
filename_def
filename_ghi_456
AR scans for repeating patterns and removes common patterns
How would i achieve this?
I need to remove repeating patterns
Say i have a number of files with common repeating text patterns in the filename.
For instance:
filename_abc_123
filename_def_123
filename_ghi_456
The output should be
filename_abc
filename_def
filename_ghi_456
AR scans for repeating patterns and removes common patterns
How would i achieve this?
Reply to #1:
Hi Raf,
I can't think of a way to do that in ARen, since there's no comparison function that works between the different filenames (that I know of, anyway). Even scripting in ARen won't let you do that (again, as far as I know). Maybe if you have scripting knowledge you could put the filenames into arrays, separating the parts of the filenames after the first underscore, then do comparisons between the different arrays and array elements. You could then write out a csv or text file that could be loaded into ARen to do the actual renames, saving you some scripting work. Might be a good time to look at something like AutoHotkey or python.
On the other hand, maybe someone with more skillz will be able to tell you how to do it in Aren. Good luck!
Best,
DF
Hi Raf,
I can't think of a way to do that in ARen, since there's no comparison function that works between the different filenames (that I know of, anyway). Even scripting in ARen won't let you do that (again, as far as I know). Maybe if you have scripting knowledge you could put the filenames into arrays, separating the parts of the filenames after the first underscore, then do comparisons between the different arrays and array elements. You could then write out a csv or text file that could be loaded into ARen to do the actual renames, saving you some scripting work. Might be a good time to look at something like AutoHotkey or python.
On the other hand, maybe someone with more skillz will be able to tell you how to do it in Aren. Good luck!
Best,
DF
Reply to #2:
thanks! I will look into python!
thanks! I will look into python!
Reply to #3:
Hello raf,
I don't know if you are around to read this, but maybe it will help you or someone else.
In thinking about your problem (I get bored :) I realized it was reasonably trivial in javascript.
Using your exact filename examples, this is how you can do it (you may need to modify it depending on your real file set; let me know if I can help):
PRE-BATCH SCRIPT:
// Array to hold filename part 2:
const partArr = [] ;
// Separate out last part to array for comparison with indexOf() and lastIndexOf():
for (n=0; n<app.itemCount; n++) partArr[n] = app.getItem(n).name.match(/_\d*?$/)[0] ;
SCRIPT:
var returnStr = item.newBasename;
var testPart = app.parseTags( "_" + '<rsubstr:1:"_">' ) ;
var fn = item.newBasename ;
if (partArr.indexOf(testPart) < partArr.lastIndexOf(testPart)) {
returnStr = fn.replace( testPart, "" );
}
return returnStr ;
--------------------------------------------------------------------------
EDIT: I changed the main script a little to simplify END EDIT
So all I did was create an array with all the filename tail-ends in the pre-batch, then compare the indexOf() and lastIndexOf(() each tail-end in the array. If they were different I stripped that part from the return string.
EDIT: Screenshot: https://drive.google.com/file/d/1oFKS-zY7SuM2C1A-wN-QMpDzIet iAEjT/view?usp=sharing
END EDIT
Sorry it took me so long to come to my senses! :)
Best,
DF
Hello raf,
I don't know if you are around to read this, but maybe it will help you or someone else.
In thinking about your problem (I get bored :) I realized it was reasonably trivial in javascript.
Using your exact filename examples, this is how you can do it (you may need to modify it depending on your real file set; let me know if I can help):
PRE-BATCH SCRIPT:
// Array to hold filename part 2:
const partArr = [] ;
// Separate out last part to array for comparison with indexOf() and lastIndexOf():
for (n=0; n<app.itemCount; n++) partArr[n] = app.getItem(n).name.match(/_\d*?$/)[0] ;
SCRIPT:
var returnStr = item.newBasename;
var testPart = app.parseTags( "_" + '<rsubstr:1:"_">' ) ;
var fn = item.newBasename ;
if (partArr.indexOf(testPart) < partArr.lastIndexOf(testPart)) {
returnStr = fn.replace( testPart, "" );
}
return returnStr ;
--------------------------------------------------------------------------
EDIT: I changed the main script a little to simplify END EDIT
So all I did was create an array with all the filename tail-ends in the pre-batch, then compare the indexOf() and lastIndexOf(() each tail-end in the array. If they were different I stripped that part from the return string.
EDIT: Screenshot: https://drive.google.com/file/d/1oFKS-zY7SuM2C1A-wN-QMpDzIet iAEjT/view?usp=sharing
END EDIT
Sorry it took me so long to come to my senses! :)
Best,
DF