Is this the correct way to script this?

This code seems to work, but I wonder if I am doing it the correct way. (Yesterday, Leo showed me I was doing something else the wrong way.)

The parameter "folder" really is either a file or folder. I wrote this thinking I was dealing with a string and vector is what came up when I was learning how to do this. I think sometimes it is an Item that is being passed, not a string. I put the complete code at the bottom.

function move(folder, cmd, dest) {
    var vector = factory.Vector();
    vector.push_back(folder);
    cmd.SetFiles(vector);
    cmd.SetDest(dest);
    cmd.Runcommand("Copy MOVE");
}

function moveAs(folder, cmd, dest, name) {
    var vector = factory.Vector();
    vector.push_back(folder);
    cmd.SetFiles(vector);
    cmd.SetDest(dest);
    cmd.Runcommand("Copy MOVE AS " + name);
}

I will post the complete code, because I don't know enough to know what is important.

var factory = DOpus.Create();
function OnClick(clickData) {
    var cmd = clickData.func.command;
    var clicked = clickData.func;
    var selFolders = clicked.sourcetab.selected;
    DOpus.ClearOutput();

    //Move folders
    for (var selected = new Enumerator(selFolders); !selected.atEnd(); selected.moveNext()) {
        //DOpus.Output("running process");
        if (selected.item().is_dir) {
            process(selected.item(), cmd);
        } else {
            //DOpus.Output(selected.item().name);
            //move(selected.item(), cmd, "\\\\AMD\\_TestDirectory\\Files")
        }
    }

    //Move files
    for (var selected = new Enumerator(selFolders); !selected.atEnd(); selected.moveNext()) {
        if (selected.item().is_dir) {
            //dig deeper
            findArchives(selected.item(), cmd);
        }
    }
}

function process(folder, cmd) {
    var contentFolder = "\\\\AMD\\_TestDirectory\\Content";
    var rootFolder = "\\\\AMD\\_TestDirectory";
    //var vector = factory.Vector(folder);
    var match = false;

    if (testContentFolder(folder.name)) {
        match = true;
        move(folder, cmd, rootFolder);
    } else if (testMyLibraryFolder(folder.name)) {
        match = true;
        moveAs(folder, cmd, rootFolder, "Content");
    } else {
        if (testSubfolder(folder.name)) {
            match = true;
            move(folder, cmd, contentFolder);
        }
    }

    if (match == false) {
        //DOpus.Output("no match");
        //DOpus.Output("Folders below: "+ folder.RealPath);
        var folderEnum = DOpus.FSUtil.ReadDir(folder.RealPath);
        while (!folderEnum.complete) {
            var folderItem = folderEnum.Next();
            if (folderItem.is_dir) {
                process(folderItem, cmd)
            }
        }
    }
}

function testContentFolder(folderName) {
    //DOpus.Output("testing content match");
    return String(folderName).toLowerCase() == "content";
}

function testMyLibraryFolder(folderName) {
    //DOpus.Output("testing my content match");
    return String(folderName).toLowerCase() == "my library";
}

function testSubfolder(folderName) {
    var subFolders = [
        "data",
        "aniBlocks",
        "Animals",
        "runtime",
        "Camarea Presets",
        "Documentation",
        "Documents",
        "Environment",
        "Environments",
        "Figures",
        "General",
        "Light Presets",
        "People",
        "Presets",
        "Props",
        "Readme",
        "Render Presets",
        "Scene",
        "Scene Builder",
        "Scene Subsets",
        "Scripts",
        "Shader Presets",
        "Templates",
    ];


    for (var counter = 0; counter < subFolders.length - 1; counter++) {

        //DOpus.Output("testing subfolder match: " + counter + ":" + subFolders[counter]);
        //DOpus.Output(String(folderName).toLowerCase());
        //	DOpus.Output(subFolders[counter].toLowerCase());
        if (String(folderName).toLowerCase() == subFolders[counter].toLowerCase()) {
            return true;
        }
    }

    return false;
}

function move(folder, cmd, dest) {
    var vector = factory.Vector();
    vector.push_back(folder);
    cmd.SetFiles(vector);
    cmd.SetDest(dest);
    cmd.Runcommand("Copy MOVE");
}

function moveAs(folder, cmd, dest, name) {
    var vector = factory.Vector();
    vector.push_back(folder);
    cmd.SetFiles(vector);
    cmd.SetDest(dest);
    cmd.Runcommand("Copy MOVE AS " + name);
}

function findArchives(folder, cmd) {
    //DOpus.Output(folder.RealPath);
    //var contentFolder = "\\\\AMD\\_TestDirectory\\Content";
    //var rootFolder = "\\\\AMD\\_TestDirectory";
    //var vector = factory.Vector(folder);
    var path = "\\\\AMD\\_TestDirectory\\Files";

    //DOpus.Output("no match");
    //DOpus.Output("Folders below: "+ folder.RealPath);
    var folderEnum = DOpus.FSUtil.ReadDir(folder.RealPath);
    while (!folderEnum.complete) {
        var item = folderEnum.Next();
        if (item.is_dir) {
            //DOpus.Output("  " + folderItem.RealPath);
            findArchives(item, cmd)
        } else {
            regex = /\.(?:rar|zip)$/;

            if (regex.test(item.name)) {
                move(item, cmd, path);
            } else if (item.name == "index.url" || item.name == "Documents.txt" || item.name == "Prem.url" || item.name == "Manifest.dsx" || item.name == "Supplement.dsx") {
                //DOpus.Output("deleting" + item);
                cmd.ClearFiles;
                cmd.AddFile(item);
                cmd.RunCommand("Delete Recycle");
            }
        }
    }
}

Basically right!

If name has a space in it then it'll need quoting. And if name happens to be one of the other argument names for the Copy command then it'll cause problems unless you use an = before it.

You can also avoid the vector and add the file/folder directly.

function move(folder, cmd, dest) {
    cmd.ClearFiles();
    cmd.AddFile(folder);
    cmd.SetDest(dest);
    cmd.Runcommand("Copy MOVE");
}

function moveAs(folder, cmd, dest, name) {
    cmd.ClearFiles();
    cmd.AddFile(folder);
    cmd.SetDest(dest);
    cmd.Runcommand('Copy MOVE AS="' + name + '"');
}

If folder is an Item object then you can use SetFiles with it, instead of the ClearFiles/AddFile combination:

function move(folder, cmd, dest) {
    cmd.SetFiles(folder);
    cmd.SetDest(dest);
    cmd.Runcommand("Copy MOVE");
}

But ClearFiles/AddFile is just one extra line and works with more things (e.g. path strings).

Thanks, I suspected using clearfiles/addfile might be the better way after your suggestion for my other problem.