The parameter for a xp_cmdshell needs to be one string. One way to do this is to concatenate the command to a separate variable first and then use it. For example
Declare
@FDate as varchar(10),
@commandtext as varchar(max)
set @Fdate = (SELECT CONVERT(INT,CONVERT(CHAR(8),GETDATE()-1,112)))
set @commandtext = 'SQLCMD -S .\ -d SFTPWELSPUN -E -Q "SELECT MAINTAG,INVOICENUMBER,INVOICEDATE,TYPE,SERVICETYPE,ITENARY,DAYS,ADVANCE_PURCHASE,TICKET_TYPE,OPTION1,OPTION2,OPTION3,NET_LOST_SAVING,LOWEST_FARE,HIGHEST_FARE FROM DBO.TBL_SFTPWELSPUN_MASTER where convert(date,invoicedate)=convert(date,getdate()-2) ORDER BY INVOICEDATE " -s "," -o"E:\Report\Details_' + @FDATE + '.CSV"'
EXEC MASTER.DBO.XP_CMDSHELL @commandtext