bimjhi
bimjhi

Reputation: 311

Substituting special symbols in batch script

I want to substitute angle brackets for commas in a variable.

I'm trying to use trick with for /f for this, but it works only for echoing that variable.

This code works:

@ECHO OFF
set GSoption=" <<  >> "
for /f "tokens=1* delims==" %%a in ('set GSoption') do echo "%%b"

But this one doesn't:

@ECHO OFF

set GSoption=" <<  >> "
set "Newvar=, ,"

for /f "tokens=1* delims==" %%a in ('set GSoption') do call :check %%b

exit /b

:check

SET "_result=%%Newvar:,=%1%%"
echo|call set /p="%_result%">>log.txt
exit /b

goto :eof

It prints unexpected <<

I want to substitute those angle brackets for commas. Is it even possible without delayedexpansion?

Upvotes: 0

Views: 61

Answers (1)

Compo
Compo

Reputation: 38613

Your question does not fully define your intention, however the solution is to use delayed expansion.

Here's a quick example replacing all < and > characters with , characters.

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "GSoption= <<  >> "
SetLocal EnableDelayedExpansion
Set "_Result=!GSOption:>=,!"
(
    For %%G In ("!_Result:<=,!") Do (
        EndLocal
        Echo %%~G
    )
) 1>"log.txt"

If you don't want a trailing CRLF, then use Set /P instead:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "GSoption= <<  >> "
SetLocal EnableDelayedExpansion
Set "_Result=!GSOption:>=,!"
(
    For %%G In ("!_Result:<=,!") Do (
        EndLocal
        Set /P "=%%~G" 0<NUL
    )
) 1>"log.txt"

As you have not explained the purpose of your for loop, you could of course do it without that too:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "GSoption= <<  >> "
SetLocal EnableDelayedExpansion
Set "_Result=!GSOption:>=,!"
(Echo(!_Result:^<=,!) 1>"log.txt"
EndLocal

And once again without the CRLF

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "GSoption= <<  >> "
SetLocal EnableDelayedExpansion
Set "_Result=!GSOption:>=,!"
Set /P "=!_Result:<=,!" 0<NUL 1>"log.txt"
EndLocal

Upvotes: 1

Related Questions