In a @"..." literal, to have a " character, you must use two of them. So:
string.Format(
    @"-S -E -M -m -e ascii -i {0}.dat -T db1.dbo.table1 -R {1}.reject -t ""|"" -r \r\n -rt value -rv 1000 -W  -fh 0", 
// note -----------------------------------------------------------------^^-^^
    saveFilePath + a,
    saveFilePath + b);
However, if you wanted those \r and \n to be a carriage return and a newline, you can't use a @"..." string literal because backslash isn't special in them (that's the whole point of them). So if that's the case:
    string.Format(
        "-S -E -M -m -e ascii -i {0}.dat -T db1.dbo.table1 -R {1}.reject -t \"|\" -r \r\n -rt value -rv 1000 -W  -fh 0", 
// note ^-------------------------------------------------------------------^^-^^
        saveFilePath + a,
        saveFilePath + b);
Recommended reading: string (C# Reference)
Side note: There's no need for the string concatenation you're doing on the function arguments. Since you're already calling string.Format, you can have it do that:
string.Format(
    "-S -E -M -m -e ascii -i {0}{1}.dat -T db1.dbo.table1 -R {2}{3}.reject -t \"|\" -r \r\n -rt value -rv 1000 -W  -fh 0", 
// note ---------------------^^^^^^--------------------------^^^^^^
    saveFilePath,
    a,             // <==
    saveFilePath,
    b);            // <==