Automatic retrieval of tags from the filename

Discuss and share scripts and script files...
atisoro
Posts: 29
Joined: 27 Jan 2025 16:27

Automatic retrieval of tags from the filename

Post by atisoro »

Hello to ALL
This forum is a must, and the XYPLORER program is a gem.
with your help I created the scripts that make it easier for me to navigate through the files.
thank you for this.
I'm asking for your support for a problem I haven't solved yet:
I'm trying to use a script that checks if one or more tags from the previously created list are found in the selected file, and if there are, to automatically add them to that file.
as an example:
+-------------------------------------
taglist("good, bad, ugly") :titter:
+-------------------------------------
myfile.txt
the ugly file.docx
a real ugly document.doc
ugly file but good.txt

the ideal result would be to add the tags to each file and delete them from the name
+---Name--------------------------------Tags--
myfile.txt
the file.docx ...... ugly
a real document.doc ...... ugly
file but.txt ..... good,ugly

any suggestion is appreciated

atisoro
Posts: 29
Joined: 27 Jan 2025 16:27

Re: Automatic retrieval of tags from the filename

Post by atisoro »

The results so far:
script for adding tags from the name of the parent folder:

Code: Select all

tag replace(getpathcomponent(<curpath>, "component", -1), "|", ","), , 1, 1; 
credit to highend  (2012) from post viewtopic.php?p=75503#p75503

atisoro
Posts: 29
Joined: 27 Jan 2025 16:27

Re: Automatic retrieval of tags from the filename

Post by atisoro »

Code: Select all

//=============================================================
//|    rename by tags, label, extra 1-2-3 and audio/video duration
//=============================================================
 end confirm("Start rename?", , , 4) != 1;
 foreach($file, <get "SelectedItemsPathNames" <crlf>>, <crlf>, "e") {
 	$base = gpc($file, "base");
        $ext  = gpc($file, "ext");
        $label = trim(tagitems("tags", , $file, 2).tagitems("label", , $file, 2).tagitems("ex1", , $file, 2).tagitems("ex2", , $file, 2).tagitems("ex3", , $file, 2));
	$durata = round(property("System.Media.Duration", $file) / 10000000);
	if $durata == 0 { $minute = ""; }
        elseif $durata < 60 { $minute = "($durata"." sec)"; }
        else { $minute = "(".round($durata / 60)." min)"; }
	renameitem(trim("$minute $label $base.$ext"), $file);
		}
        }

Code: Select all

//=============================================================
//|    rename file by adding folder name
//=============================================================
	rename b, "<folder> - *";

Code: Select all

//=============================================================
 / /|    undo rename by folder
//=============================================================
     foreach($file, <get "SelectedItemsPathNames" <crlf>>, <crlf>, "e") {
     $base = gpc($file, "base");
     renameitem(replace($base, <folder>." - "), $file);
     }

highend
Posts: 14571
Joined: 06 Feb 2011 00:33
Location: Win Server 2022 @100%

Re: Automatic retrieval of tags from the filename

Post by highend »

Code: Select all

    $tags = taglist(); // E.g.: "good, bad, ugly"
    end (!$tags), "No taglist item(s), aborted!";

    $sel = <get SelectedItemsPathNames>;
    end (!$sel), "No item(s) selected, aborted!";

    $tags = replace($tags, ", ", "|");
    foreach($file, $sel, <crlf>, "e") {
        $base  = gpc($file, "base");
        $match = regexmatches($base, "\b(" . $tags . ")(\b|$)");
        if ($match) {
            $newTags = replace($match, "|", ",");
            tagitems("tags", $newTags, $file);
            $newBase = regexreplace($base, "\b(" . $match . ")(\b|$)");
            $newBase = trim(regexreplace($newBase, "[ ]{2,}", " "));
            renameitem($newBase, $file);
        }
    }
One of my scripts helped you out? Please donate via Paypal

atisoro
Posts: 29
Joined: 27 Jan 2025 16:27

Re: Automatic retrieval of tags from the filename

Post by atisoro »

highend you are the wizard of scripts.
it's perfect!
and very fast!
clean code like a diamond.
thousands of thanks :appl:

is it possible to make 2 small additions?
1. to take the current list of tags (which appears in the quick menu Add tags by list...)

and

2. to avoid errors that the file already exists by adding a numerical sequence or similar
got error

Code: Select all

Rename target exists already: C:\Users\atisoro\Desktop\Fld\neutral\text.txt

highend
Posts: 14571
Joined: 06 Feb 2011 00:33
Location: Win Server 2022 @100%

Re: Automatic retrieval of tags from the filename

Post by highend »

1. What's wrong with $tags = taglist(); here?

2. renameitem($newBase, $file, 16);
One of my scripts helped you out? Please donate via Paypal

atisoro
Posts: 29
Joined: 27 Jan 2025 16:27

Re: Automatic retrieval of tags from the filename

Post by atisoro »

Sorry for the incomplete expression of my request
Actually, taglist("a, b, c") does the job, but I would have liked to be able to select from multiple taglists, adapted for multiple scenarios.
Now I use a User button from which I choose:
  • "public list" taglist("todo, undo, redo"); //default
    "office list" taglist("verified, approved, rejected");
    "test" taglist("good, bad, ugly");
and several other lists.
It would be very helpful to adapt the script in this regard.
Last edited by atisoro on 28 Jan 2025 17:03, edited 2 times in total.

atisoro
Posts: 29
Joined: 27 Jan 2025 16:27

Re: Automatic retrieval of tags from the filename

Post by atisoro »

Code: Select all

renameitem($newBase, $file, 16);
yes, I was careless and didn't check the help file.
It's very clear now:

Code: Select all

flags 0: [Default] Smart (keep extension unless extension is passed)
1: Rename base (keep extension)
2: Rename extension (keep base)
[1 + 2 = 3: Rename all (base and extension)]
4: Show dialog (Suffix / Overwrite) on name collision.
8: Silent overwrite on name collision.
16: [b]Force appending the numsuffix[/b]. If numsuffix is not passed as 4th argument then it defaults to the incremental suffix set in Configuration.

highend
Posts: 14571
Joined: 06 Feb 2011 00:33
Location: Win Server 2022 @100%

Re: Automatic retrieval of tags from the filename

Post by highend »

Then define them e.g. in a heredoc and choose one via inputselect?
One of my scripts helped you out? Please donate via Paypal

atisoro
Posts: 29
Joined: 27 Jan 2025 16:27

Re: Automatic retrieval of tags from the filename

Post by atisoro »

Code: Select all

heredoc
?
Can you show me an example?

highend
Posts: 14571
Joined: 06 Feb 2011 00:33
Location: Win Server 2022 @100%

Re: Automatic retrieval of tags from the filename

Post by highend »

Code: Select all

    $tags = <<<>>>
a|b|c
d|e|f
g|h|i|j|k
    >>>;

    $tags = inputselect("Choose tag(s)", $tags, <crlf>, 4+32+8192+16384, , 600, 400);
?
One of my scripts helped you out? Please donate via Paypal

atisoro
Posts: 29
Joined: 27 Jan 2025 16:27

Re: Automatic retrieval of tags from the filename

Post by atisoro »

YES, thank you!

atisoro
Posts: 29
Joined: 27 Jan 2025 16:27

Re: Automatic retrieval of tags from the filename

Post by atisoro »

Working code - highend masterpiece

Code: Select all

    $tags = <<<>>>
a|b|c
d|e|f
g|h|i|j|k
    >>>;

    $tags = inputselect("Choose tag(s)", $tags, <crlf>, 4+32+8192+16384, , 600, 400);

    $sel = <get SelectedItemsPathNames>;
    end (!$sel), "No item(s) selected, aborted!";

    foreach($file, $sel, <crlf>, "e") {
        $base  = gpc($file, "base");
        $match = regexmatches($base, "\b(" . $tags . ")(\b|$)");
        if ($match) {
            $newTags = replace($match, "|", ",");
            tagitems("tags", $newTags, $file);
            $newBase = regexreplace($base, "\b(" . $match . ")(\b|$)");
            $newBase = trim(regexreplace($newBase, "[ ]{2,}", " "));
            renameitem($newBase, $file, 16);
        }
    }
problem solved for me

atisoro
Posts: 29
Joined: 27 Jan 2025 16:27

Re: Automatic retrieval of tags from the filename

Post by atisoro »

Actually, it would be a small improvement...
this line

Code: Select all

$allScripts = report("{basename} - ({comment})|",$allScripts);
generates a wrong result for example my file - ()
(this happend only was no comment)
and it would be cleaner if there were no comments to include only basename without minus sign and brackets.
and if there are comments it remains {basename} - ({comment})
Last edited by atisoro on 30 Jan 2025 20:17, edited 1 time in total.

highend
Posts: 14571
Joined: 06 Feb 2011 00:33
Location: Win Server 2022 @100%

Re: Automatic retrieval of tags from the filename

Post by highend »

What?
One of my scripts helped you out? Please donate via Paypal

Post Reply