public static CommandResult CleanCommand(CommandLineProto proto, CommandLine args)
        {
            var app = ConsoleApp.Instance;

            try
            {
                PathFolderOptions options   = GetPathFolderOptions(args);
                CommandResult     result    = new CommandResult();
                PathFolders       foriginal = new PathFolders(options);
                PathFolders       fvalid    = new PathFolders(options);
                PathFolders       finvalid  = new PathFolders(options);
                bool isVerbose = args.HasSwitch(Names.VerboseSwitch, Names.VerboseMnemonic);
                bool isQuiet   = args.HasSwitch(Names.QuietSwitch, Names.QuietMnemonic);
                bool commit    = true;
                foriginal.Fill();
                foreach (PathFolder f0 in foriginal)
                {
                    if (f0.IsValid)
                    {
                        fvalid.Add(f0);
                    }
                    else
                    {
                        finvalid.Add(f0);
                    }
                }
                if (finvalid.Count == 0)
                {
                    if (options == PathFolderOptions.Process)
                    {
                        app.WriteOut(fvalid.ToInlineString());
                    }
                    return(new CommandResult(true, "No invalid folders in path"));
                }
                if (!isQuiet)
                {
                    app.WriteError(isVerbose ? finvalid.ToVerboseString() : finvalid.ToString());
                    commit = app.GetConfirmation("Remove folders from PATH?");
                    app.WriteError();
                }
                if (options == PathFolderOptions.Process && commit)
                {
                    app.WriteOut(fvalid.ToInlineString());
                }
                else if (options == PathFolderOptions.Process)
                {
                    app.WriteOut(foriginal.ToInlineString());
                }
                else if (commit)
                {
                    fvalid.Commit();
                }
                if (commit)
                {
                    return(new CommandResult(true, $"{finvalid.Count} folder(s) removed from PATH"));
                }
                else
                {
                    return(new CommandResult(false, "User canceled operation"));
                }
            }
            catch (Exception ex)
            {
                return(new CommandResult(false, "Unable to clean invalid PATH elements", ex));
            }
        }
        public static CommandResult AddCommand(CommandLineProto proto, CommandLine args)
        {
            var app = ConsoleApp.Instance;

            try
            {
                int  defaultPos = proto.GetValue <int>(Names.PositionSwitch);
                int  pos        = args.GetValue <int>(Names.PositionSwitch, Names.PositionMnemonic, defaultPos);
                var  options    = GetPathFolderOptions(args);
                bool isVerbose  = args.HasSwitch(Names.VerboseSwitch, Names.VerboseMnemonic);
                bool isQuiet    = args.HasSwitch(Names.QuietSwitch, Names.QuietMnemonic);
                var  folders    = new PathFolders(options);
                folders.Fill();
                var    added  = new PathFolders(options);
                int    parg   = 2;
                string path   = args.GetResolvedValue <string>(parg++);
                bool   commit = true;
                while (path != null)
                {
                    added.Add(new PathFolder(path));
                    path = args.GetResolvedValue <string>(parg++);
                }
                if (!isQuiet)
                {
                    app.WriteError();
                    app.WriteError("Add...");
                    app.WriteError();
                    app.WriteError(added.ToString(), false);
                    app.WriteError();
                    app.WriteError("to...");
                    app.WriteError();
                    app.WriteError(isVerbose ? folders.ToVerboseString() : folders.ToString());
                    app.WriteError();
                    commit = app.GetConfirmation($"at position {pos}?");
                    app.WriteError();
                }
                if (commit)
                {
                    int p = pos - 1;
                    foreach (var f in added)
                    {
                        folders.Insert(p++, f);
                    }
                }
                if (options == PathFolderOptions.Process)
                {
                    app.WriteOut(folders.ToInlineString());
                }
                else if (commit)
                {
                    folders.Commit();
                }
                if (commit)
                {
                    return(new CommandResult(true, $"{added.Count} folder(s) added to PATH at position {pos}"));
                }
                else
                {
                    return(new CommandResult(false, "Add folders operation canceled"));
                }
            }
            catch (Exception ex)
            {
                return(new CommandResult(false, "Unable to add folders to command", ex));
            }
        }