I was wondering if there is a consistent way of making sure special chars get through functions as intended. I am making progress, but I'm disappointed. It seems special chars need to be escaped whenever they appear in a for.
Code: Select all
@echo off &setlocal disableDelayedExpansion
setlocal enableDelayedExpansion
:: (
<"%~0" >nul (set /p $lf=&pause&set /p $lf=)
:: )
for %%r in ( "!$lf:~0,1!" ) do endlocal &set "$lf=%%~r" &echo. &echo.This%%~rworks
set ^"$n1c=^^^%$lf%%$lf%^%$lf%%$lf%^^"
:: part of interest
set ^"forX_=set "$NotDelayedFlag=!" ^&setlocal enableDelayedExpansion ^&set "$=" ^&( for %%^! in"
set ^"_Udelim_=do set "$=!$!¦%%!" ) ^&( %$n1c%
set "$=!$:*¦=!" ^&set "$=!$:~1,-1!" ^&if not defined $NotDelayedFlag ( %$n1c%
set ^"$=!$:^"=###q!^" %$n1c%
set "$=!$:^=^^!" %= replace directly =% %$n1c%
call set "$=%%^$:^!=""^!%%" ! %$n1c%
set "$=!$:""=^!" %$n1c%
set ^"$=!$:###q=^"!^" %$n1c%
) %$n1c%
) ^&for /f "tokens=1-26 delims=¦" %%a in ( "!$!" ) do ( endlocal ^&"
:: part of testing
setlocal disableDelayedExpansion
:: (
%forX_% ( '$debug, "This ^^^^Works ^^^!"' ) %_Udelim_% echo. a=%%a_ &echo. b=%%b_ )
:: )
endlocal
setlocal enableDelayedExpansion
:: (
%forX_% ( '$debug, "This ^^^^Works ^^^!"' ) %_Udelim_% echo. a=%%a_ &echo. b=%%b_ )
:: )
endlocal
pause
exit
Code: Select all
a=$debug_
b=This ^Works !
a=$debug_
b=This ^Works !
