Batch - 138 bytes
@!! 2>nul||cmd/q/v/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 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. 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"
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
Thanks to to some helpful people over here - 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"