Shell scripting: Why does only the "-" hyphen throw an error?
From the man page for mv, the first (and possibly second) argument on the command line, if it begins with a -, is an option and not a file. Only -f | -i | -n are allowed options.

Simplest way is not to use - in a file name—it will confuse other command line programs—given that prepending - is a workaround for something else I would just not use that character.

If this is not an option, you can rewrite the mv commands like this

mv ./"$f" "${DIRNAME}/${FILENAME:2}"


or (a bit more generic because it then also works for absolute paths)

mv -- "$f" "${DIRNAME}/${FILENAME:2}"


Another option (and is what I would do for any bash script longer than a few lines) is write in a scripting language like perl or python - in this case they solve the problem by their move functions not passing the filenames to mv