Site logo

Sort file names function for Mac

There’s a known bug in OSx: when you get files by script, their order is messed.
I don’t remember the exact version number when it started, but I remember I had read a post about this issue on the Adobe scripting forum, but it was lost after Adobe destroyed the old forum.
Also, I encountered it myself while debugging a script a year or two ago. But then I had no time to find a solution and switched to PC.
Note: this is a bug with OSx — not the script!

Here is a solution I found on the forum:
The author is Uwe Laubender
The sorting algorithm is by Martin Fischer from www.hilfdirselbst.ch.

function sortFileNames(a, b) { 
	a = a.name;
	b = b.name;
	var regExp = new RegExp('^\\d+', );
	var aObj = {num: a.match(regExp) != null ? a.match(regExp)[0] : '_', string: a.replace(/^\d+/, '')};
	var bObj = {num: b.match(regExp) != null ? b.match(regExp)[0] : '_', string: b.replace(/^\d+/, '')};
	// a and b are fully numeric :
	if (aObj.string =='' && bObj.string == '') { return a - b };
	// the numeric parts of a and b are equal :
	if (aObj.num == bObj.num ) { return aObj.string.toLowerCase() > bObj.string.toLowerCase() };
	if (aObj.num > bObj.num ) { return 1 };
}

I used it while updating the Create a book from InDesign documents in selected folder script.

See also Alphabetical Sort in JavaScript (and InDesign)