Kravaros
Kravaros

Reputation: 222

Dealing with potentially necessary escape characters

Related: Using batch echo with special characters

How do I deal with using escape characters on text that might or mightn't be a special character?

Suppose we have user input:

Set /p var=prompt:

Now, I need to make sure that the text gets interpreted as text even if the user enters something like a special character. But I cannot simply add ^ before the variable...because that'd cancel the variable. The ^^%var% and ^%%var% options don't seem to work either.

How do I go about doing this?

Upvotes: 1

Views: 100

Answers (2)

Aacini
Aacini

Reputation: 67216

You should realize that the escapes are required in the source code of your program or when you expand a variable via %variable% or in the replaceable parameter of a for command. This is not required if you expand a variable via !delayed! expansion. So, your problem may be easily solved this way:

setlocal EnableDelayedExpansion

Set /p var=prompt:
echo !var!

The standard method to avoid the problem when you read a file that may have special characters is enclosing the value of the replaceable parameter in quotes when the value is asigned with Delayed Expansion disabled, and then Enable Delayed Expansion in order to manage the value. Of course, this method forces to insert an endlocal command inside the loop:

for /F "delims=" %%a in (anyFile.txt) do (
   set "line=%%a"
   setlocal EnableDelayedExpansion
   echo Line with special characters: !line!
   endlocal
)

Upvotes: 5

djechlin
djechlin

Reputation: 60758

Not possible. The shell processes the user input before your script does. Your script won't even know the user typed an escape character.

Upvotes: 0

Related Questions