At first, yes you can replace even percent signs, but not within a percent expansion, you need a delayed expansion here.
Setlocal EnableDelayedExpansion set tmpstr=!tmpstr:%=%%!
But if you use the delayed expansion, you don’t need the escapes anymore, as the delayed expansion is the last phase of the batch parser and all characters lose any special meaning.
You only need to echo with delayed expansion.
EDIT: Clean solution
@echo off setlocal DisableDelayedExpansion REM * More or less secure getting the parameter SET "AlbumArtist=%~1" setlocal EnableDelayedExpansion SET "FlacHyperLink==hyperlink("file://!AlbumArtist!";"LossLess")" echo !FlacHyperLink! echo !FlacHyperLink!> hugo.txt
You need disableDelayedExpansion first, to get even exclamation marks from
After that, you should switch to delayed expansion and use it anywhere.