<h2>Batch - 138 bytes</h2> @!! 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 https://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"