Try this (be careful as it also duplicates folders) as a script button.
DuplicateNumber.dcf (4.8 KB)
function OnClick(clickData)
{
var cmd = clickData.func.command;
var fsu = DOpus.FSUtil;
cmd.deselect = false; // Prevent automatic deselection
// --------------------------------------------------------
cmd.RunCommand("Set VIEW=Details");
var duplicateCmd = DOpus.Create.Command();
duplicateCmd.SetSourceTab(clickData.func.sourcetab);
duplicateCmd.SetDestTab(clickData.func.sourcetab);
// --------------------------------------------------------
DOpus.Output("Selected items in " + clickData.func.sourcetab.path + ":");
if (clickData.func.sourcetab.selected.count == 0)
{
DOpus.Output("No selection. Aborting.");
}
var allTargetNames = DOpus.Create.Map();
for (var e = new Enumerator(clickData.func.sourcetab.selected); !e.atEnd(); e.moveNext())
{
var item = e.item();
dout("item name : " + item.name_stem_m);
// Define default target duplicate name
var targetName = GetNextName(item.name_stem_m);
var fullTargetName = item.path + "\\" + targetName + item.ext_m;
// dout("full target = '" + fullTargetName + "'");
while (fsu.Exists(fullTargetName) || allTargetNames.Exists(fullTargetName)) {
//dout("fsu : already exists");
targetName = GetNextName(targetName);
fullTargetName = item.path + "\\" + targetName + item.ext_m;
//dout(" => Needs to try '" + fullTargetName + "'");
}
allTargetNames(fullTargetName) = 1;
// dout("## Target '" + fullTargetName + "' added to the map");
// Build command
var unitCmd = 'Copy "' + item + '" AS "' + targetName + item.ext_m + '"';
dout("cmd line = #" + unitCmd + "#");
duplicateCmd.AddLine(unitCmd);
}
duplicateCmd.Run();
}
function GetNextName(name) {
var endingNumber = 1;
var targetName = name + " " + endingNumber;
var regex = new RegExp(" ([0-9]+)$", "g");
var match = regex.exec(name);
if (match !== null && match.length == 2) {
//dout("Item ends with a number (" + match[1] + ")");
endingNumber = +match[1] + 1;
//dout ("NEW Ending Number = " + endingNumber);
targetName = name.replace(regex, " " + endingNumber);
}
//dout ("Target Name = '" + targetName + "'");
return targetName;
}
function dout(msg, error, time) {
if (error == undefined) error = false;
if (time == undefined) time = true;
DOpus.output(msg, error, time);
}