So to best answer this let's look at a standard dos command.
For example say we had a batch file you can pass multiple arguments or settings directly into the command.
At a dos prompt you typed:
"ycopy.bat source.txt destination.txt" - which would copy the file after doing a hash check for ie..
"source.txt" = is the first argument which would be %1
"destination.txt" = is the second argument which would be seen in the batch file as %2
They are essentially variables that are passed from when you run the batch file.
If you use %* it would take the anything after the command and see it as one string
%* = "source.txt destination.txt" a full string of whatever the arguments were on the line after calling the batch file. You would then either need to parse, or use the full string in your script.
An example of when you would do this is, if you had a installation executable but wanted a batch file to check for certain things before the installation ran. And wanted to pass the full string to an installation program (which would be parsing arguments as well) .
ie:
Installjoe.bat -user admin -password adminpassword -server backup.xom
in the batch file you would do your checks etc
then
install.exe %*
which dos would interpret as: install.exe -user admin -password adminpassword -server backup.xom