<h2>Batch - 142 bytes</h2>

    @if .!! NEQ . cmd/q/von/c%0 %1&exit/b 
    set s=%1&for /F %%a in ('"prompt $H&echo on&for %%b in (1)do rem"')do set D=%%a
    echo %s:^H=!D! !D!%


The first line is a way of saving a few bytes over the lengthy `@echo off&setLocal enableDelayedExpansion` (which turns echo off and enables the delayed expansion of variables, in case you were wondering). I explained it in http://codegolf.stackexchange.com/questions/20614/tips-for-golfing-in-batch.

The second line is a neat little trick to save the a backspace control character into a variable. It's pretty hacky, and I can't pretend to take credit for it. It's sort of explained [here](http://ss64.org/viewtopic.php?id=1344). Basically uses the prompt command to generate a backspace character and captures it in a variable - in this case `!D!`.

The final line then performs the simple string manipulation of - replace `^H` with `!D!<SPACE>!D!`. 

    C:\>bsp.bat "testing^H^H^H test"
    "test test"

<strike>Unfortunately it breaks with cases like `"AAA^HB^H^H"` - where it should produce `"A"`, it instead produces `"A"B`. Which is somewhat confusing. I'll have to look into how Batch string manipulation works in some more depth.

    C:\>bsp.bat "AAA^HB^H^H"
    "A"B

</strike>

Thanks to to some helpful people [over here](http://stackoverflow.com/questions/31395521/control-characters-and-string-manipulation/31397016#31397016) - I now realize that I was only saving the backspace character (0x08), and so was only overwriting the characters. It now works with examples like the following:

    C:\>bsp.bat "AAA^HB^H^H"
    "A"