While debugging a script, it's usually helpful to use an echo until you have it correct, then remove the echo as the last step. Either an additional debug message above the command being used, or as a replacement. Your example isn't working because you usually don't want to use $1 and $* at the same time. $* means to repeat the command for each token in the $1- string, and in this context the $1 and $2 etc are filled by having more than 1 nick highlighted.
Note that $2 is filled only in the command and not in the menu label, so if you have a line in your menu popup like
test $1 and $1- : echo -a $1 and $1-
... and then highlight 2-or-more nicks, the echo shows $1- is filled with the list of all the nicks that are highlighted, but the menu label only recognizes the $1 portion. So you need an echo to see the entire $1-
You can't use $* in your menu label either
Also, you might want to consider using $input(prompt,e,window title) instead of using $$?="prompt" because $input is easier to read and understand, as well as gives you additional features options not listed here.
Here in this example I fill $1 $2 $3 with 3 nicks so you can see how the echo repeats:
//tokenize 32 nick1 nick2 nick3 | echo -a samove $* $chan $$?="Move to:"
samove nick1 #ThisChan #newchan
samove nick2 #ThisChan #newchan
samove nick3 #ThisChan #newchan
So you can make your menu command like this, noting that your label containing $1 $2 or $1- is limited to showing only the $1 portion of $1- and $2 $3 etc are not filled.
bad
.samove $1-:/samove $1 $chan $* $$?="Move to:"
good
.samove $1-:/samove $* $chan $$?="Move to:"
or replace the $$? with $input(Move to:,e,any window title)