C:\>set g=/?
C:\>echo %g%
Displays messages, or turns command-echoing on or off.
ECHO [ON | OFF]
ECHO [message]
Type ECHO without parameters to display the current echo setting.
C:\>
如果我确实设置了 g="/?" 然后回显 %g% 那么它就包含引号。
我只想要不带引号的 /?,当我执行 echo %g% 时它应该只会显示 /?
没什么特别的理由。但这就是我想要的。希望这是可能的。
答案1
要让文本显示为输出,即使它是单词ON
、单词OFF
或选项序列,也可以使用臭名昭著的回声点技巧。不要echo
使用命令,而要使用echo.
命令。
C:\>set g=/?
C:\>echo. %G%
/?
C:\>echo. on
on
C:\>echo.%G%
/?
C:\>
echo.
请注意在分隔空格方面以及命令行解析器如何检测命令名称结尾方面的奇怪行为。如果你有JP Software 的 TCC/LE当然,您仍然可以使用这种相当可疑的语法,它的根源在于 MS-DOS,COMMAND
其中除了空格之外,还有几个标点符号是“终止”字符,但最好使用更常规的 TCC 本机语法,尤其是因为它保留了普通空格作为命令名称和命令尾之间的分隔符:
[C:\]set g=/?
[C:\]echo ``%G%
/?
[C:\]
然而, TCC 的原生语法不会阻止on
被off
特殊识别。为此,您仍然需要该echo.
命令。
答案2
事实上它正在按原样工作。:)
当您将“g”设置为“/?”然后键入时,echo %g%
您实际上是在键入echo /?
,它(应该)为您提供所看到的回显帮助(“显示消息,或打开或关闭命令回显...”)。
如果你输入,echo test%g%
你就会得到test/?
返回。
答案3
实际上set g=/?
是正确的。问题是 /? 对 cmd.exe 有特殊含义。它表示显示命令的帮助。例如尝试dir /?
。或者在你的情况下echo /?
。
运行set g
你会看到 g 确实设置为 /?
因此,当您运行时,echo %g%
您实际上是在运行echo /?
,它会告诉 cmd.exe 打印帮助消息。
答案4
只需转义“ /
” - 因此尝试:
C:\>set g=\/?