function OnInit(initData) { initData.name = 'FindDupesInSubfolders'; initData.version = '2023-07-04'; initData.url = 'https://resource.dopus.com/t/find-duplicates-in-subfolders/44909'; initData.desc = ''; initData.default_enable = true; initData.min_version = '12.0'; } function OnAddCommands(addCmdData) { var cmd = addCmdData.AddCommand(); cmd.name = 'FindDupesInSubfolders'; cmd.method = 'OnFindDupesInSubfolders'; cmd.desc = ''; cmd.label = ''; cmd.template = ''; cmd.hide = false; cmd.icon = 'script'; } function OnFindDupesInSubfolders(scriptCmdData) { var cmd = scriptCmdData.func.command; var tab = scriptCmdData.func.sourcetab; var lst = tab.lister; var fsu = DOpus.FSUtil(); var ssi = DOpus.Create().StringSetI(); cmd.deselect = false; if (tab.selected_dirs.count == 0) return; cmd.RunCommand('Set UTILITY=otherlog'); DOpus.ClearOutput(); DOpus.Output('Enumerating selection...'); for (var e = new Enumerator(tab.selected_dirs); !e.atEnd(); e.moveNext()) { var item = e.item(); if (String(item.realpath).indexOf('$RECYCLE.BIN') >= 0) continue; ssi.insert(item); var folderEnum = fsu.ReadDir(item, 'r'); while (!folderEnum.complete) { var folderItem = folderEnum.Next(); if (!folderItem.is_dir) continue; ssi.insert(folderItem); } folderEnum.Close(); } DOpus.Output(''); DOpus.Output('... done.'); var k = ssi.count; var newColl = fsu.GetItem('coll://Dupes-' + DOpus.Create().Date().Format('D#yyyyMMdd-T#HHmmss')); cmd.RunCommand('CreateFolder NAME="' + newColl + '" READAUTO=tab,dual'); DOpus.Output(''); DOpus.Output('Searching ' + k + ' folders...'); DOpus.Output(''); for (var e = new Enumerator(ssi); !e.atEnd(); e.moveNext()) { var item = e.item(); var cmdLine = 'Find' + ' NAME=*.*' + ' DUPES' + ' MD5=cache' + ' DELMODE' + ' COLLNAME="' + newColl.name + '"' + ' IN="' + item + '"'; DOpus.Output(k + '\t\t' + cmdLine); cmd.RunCommand(cmdLine); k--; } DOpus.Output(''); DOpus.Output('... done.'); lst.Update(); cmd.SetSourceTab(lst.desttab); cmd.RunCommand('Set SORTBY=parent,-name'); cmd.RunCommand('Set CHECKBOXMODE=on'); cmd.RunCommand('Set GROUPBY=dupes'); cmd.RunCommand('Set UTILITY=dupe'); }