fix windows batch argument probrem.

the `shift` command of cmd.exe is not shift `%*`.
and use delayed-expansion. immediate expansion cause many troubles of special-characters in arguments.
What is the difference between `%` and `!`?