In your own code, you never declare or set a value for @holddate.
Are you sure you have declared BOTH variables as varchar(100) ?
To help see what is going on, remove the BACKUP command for a while, and replace it with
SELECT @mystring
THen once you know what is in the string, you can test the Backup command. My guess is that it does not like the spaces and/or special characters in your date format.