/*
===============================================================================
Function : Move files in all subfolders to the current folder, auto rename, delete empty folders, two-step undo
Created : 2022-11-08
Modified : 2023-09-04
Version : v0.5
===============================================================================
*/
var tab = DOpus.listers(0).activetab;
var cmd = DOpus.Create().Command;
var fsu = DOpus.FSUtil;
var soucepath = tab.path;
var dirs = tab.selected_dirs;
if (dirs.count != 0) {
// Enumerate and add all files in each selected folder
cmd.ClearFiles();
for (var eSel = new Enumerator(dirs); !eSel.atEnd(); eSel.moveNext() )
{
var eFolder = eSel.item();
var folderEnum = fsu.ReadDir(eFolder, "r");
while (!folderEnum.complete) {
var item = folderEnum.Next;
if (!item.is_dir)
cmd.AddFile(item)
}
}
// Move the subfolder's items to the current directory via Rename operation
if (cmd.filecount)
cmd.RunCommand('Rename PATTERN="*" TO="' + soucepath + '\\' + '*"' + ' AUTORENAME');
// Calculate folders size
cmd.ClearFiles();
for (var eSel = new Enumerator(dirs); !eSel.atEnd(); eSel.moveNext() )
{
var eItem = eSel.item();
if (!FileCountRecursive(eItem))
cmd.AddFile(eItem);
}
// Delete empty folders
cmd.RunCommand('Delete FILE RECYCLE QUIET');
}
function FileCountRecursive(filePath) {
var fileCount = 0;
var folderEnum = fsu.ReadDir(filePath, "r");
while (!folderEnum.complete) {
var folderItem = folderEnum.Next;
if (!folderItem.is_dir) {
++fileCount;
}
}
return fileCount;
}
Toolbar button:
Unpack folders v0.5.dcf (3.5 KB)
Unpack folders .dcf (3.0 KB)
==============================================================================
Move all subfolder files to the selected folders
/*
===============================================================================
Function : Move all subfolder files to the selected folders, auto rename, delete empty folders, two-step undo
Created : 2023-08-21
Modified : 2023-08-21
Version : v0.1
=============================================================================
*/
var tab = DOpus.listers(0).activetab;
var cmd = DOpus.Create().Command;
var dirs = tab.selected_dirs;
// @dirsonly
if (dirs.count != 0) {
cmd.ClearFiles();
for (var eSel = new Enumerator(dirs); !eSel.atEnd(); eSel.moveNext() )
{
var eFolder = eSel.item();
cmd.AddFile(eFolder);
}
// Move the subfolder's items to the selected directory via Rename operation
cmd.RunCommand('Rename PATTERN="*" TO="{filepath$}*" AUTORENAME RECURSE=HERE');
// Calculate the subfolder size
cmd.ClearFiles();
for (var eSel = new Enumerator(dirs); !eSel.atEnd(); eSel.moveNext() )
{
var eFolder = eSel.item();
var folderEnum = DOpus.FSUtil.ReadDir(eFolder);
while (!folderEnum.complete) {
var folderItem = folderEnum.Next;
if (folderItem.is_dir)
if (!FileCountRecursive(folderItem))
cmd.AddFile(folderItem);
}
}
// Delete empty folders
cmd.RunCommand('Delete FILE RECYCLE QUIET');
}
function FileCountRecursive(filePath) {
var fileCount = 0;
var folderEnum = DOpus.FSUtil.ReadDir(filePath, "r");
while (!folderEnum.complete) {
var folderItem = folderEnum.Next;
if (!folderItem.is_dir) {
++fileCount;
}
}
return fileCount;
}
Toolbar button: Move all subfolder files to the selected folders
Unpack subfolders.dcf (3.4 KB)