The function you have for converting the string '01/01/2012' into a date is incorrect - the function Date is used for formatting a date field, whilst the function you require, Date#, converts a string to a number.
You could change the line to read:
FOR i=Date#('01/01/2012','DD/MM/YYYY') to $(y)
The suffix in the QVD file name if this worked, would be the integer number for the day (ie. today is 41372), and you probably want it in a YYYYMMDD format.
Try this syntax instead:
let vDays = num#(today() - date#('01/01/2012','DD/MM/YYYY'));
FOR i = 0 to vDays
let vSuffix = Date(today() - vDays + i, 'YYYYMMDD');
TRACE $(i) - $(vSuffix);
You can use $(vSuffix) in the same way as you do $(i) in your code above.
In general, if you need to debug your code, try entering the debug mode from script editor and step through your code, having a look to your variables in particular.
I assume you are running into troubles because your For .. Next expressions for start / end won't evaluate to integers (which I believe you'll need here). Try using numerical integer representation for your loop dates:
LET y = num(Today());
LET x = num(makedate(2012,1,1));
FOR i = x to y
LET vDate = Date($(i),'DD/MM/YYYY');
STORE * FROM Cartera_COP into ../01_Datos/Cartera_COP_$(vDate).qvd (qvd);