0Day Forums
CMD/windows Batch: how to pass a double quote and a larger than sign in a command argument? - Printable Version

+- 0Day Forums (https://0day.red)
+-- Forum: Coding (https://0day.red/Forum-Coding)
+--- Forum: .bat & .wsf & .cmd (https://0day.red/Forum-bat-wsf-cmd)
+--- Thread: CMD/windows Batch: how to pass a double quote and a larger than sign in a command argument? (/Thread-CMD-windows-Batch-how-to-pass-a-double-quote-and-a-larger-than-sign-in-a-command-argument)



CMD/windows Batch: how to pass a double quote and a larger than sign in a command argument? - fanlights671555 - 07-23-2023

I can pass a double quote, and a larger than sign to any command in several ways: `'"'`, `"\""`, `">"`

But when i try to pass them together

C:\>echo "\">"
The system cannot find the path specified.

Same with `"\"\>"`. I could make it work with single quotes around, but since i already have so much going on with dealing with quotes i'd like to keep it all inside double quotes.

Is there any way to escape that?

I'm on windows7 but i believe this is some backward compatibility 'feature', so not sure this info is relevant.

Edit 1:

I tought Endoro had the right answer... but it's not that simple. CMD treats `^>` differently depending if there's a escaped double quote in the string. Anyone have any idea why?! or a different escaping method?

C:\>sh echo "\"^>"
">

C:\>sh echo "a^>"
a^>

C:\>echo "\"^>"
"\">"

C:\>echo "a^>"
"a^>"

Edit 2:
here are the tests cases for what Monacraft suggested, using `^` before the quotes that go around the string

C:\>echo ^"a/>"
The system cannot find the path specified.
(we still need to escape that > symbol)

C:\>echo ^"a/^>"
"a/>"
(work fine without \" in the string)

C:\>echo ^"\"/^>"
"\"/^>"
(add a single \" and the ^> escaping stop to works)

C:\>echo ^""/^>"
""/^>"
(ok, using ^ before the string means i dont have to escape the " anymore)

C:\>echo ^"^\"/^>"
"\"/^>"
(but what if i have an actual \" in my input that i have to escape... would ^\ prevent this from happening? nope)


RE: CMD/windows Batch: how to pass a double quote and a larger than sign in a command argument? - hays174 - 07-23-2023

OK, I can't give you a full explanation, but if you put an escape character before the double quotes it works:

C:\>echo "a^>"
"a^>"

C:\>echo ^"a^>"
"a>"

I think by putting a `^` before the string, your telling cmd not to treat a `^` inside the string as part of the actual string. Which is why:

C:\>echo "text^>" ^"text^>"
"text^>" "text>"

Does that. However, I can't give you a full explanation, but at least that solves your problem.

### Edit 2: ###

Ok, for edit 2 All I can say is that you don't need to escape anything inside the string!

C:\>echo ^"\"/>"
"\"/>"

Also found this website which explained that to escape a `\` all you need is `\\`. [Click here][1] for more Information. For `"` simply double up the quotes (`""`).


[1]:

[To see links please register here]