当我尝试创建变量时,有时在用%包围时不会回想起来。一个例子是
const object = {
test: { name = 'Locohost' }
}
const { name } = object.test
console.log(name)
我希望它显示为
@echo off
set firstvar= <o
set secondvar= ^. .^
echo.
echo %firstvar%
echo %secondvar%
pause
但我得到
<o
^. .^
我真的很困惑,我似乎无法修复它。我已经把问题缩小到关于分配变量的规则,我猜测The system cannot find the file specified.
ECHO is off.
. .echo.
Press any key to continue . . .
被视为HTML或网站或其他东西。我真的很困惑第二行,为什么说ECHO关闭?为什么<o
?任何帮助将不胜感激,谢谢。
答案 0 :(得分:0)
插入符^
是转义符号,为了回应它,你必须为每个处理步骤(设置/回显)加倍^^
。
重定向/管道符号<|>
必须使用^
插入符号进行转义
如果要回显的字符串/变量评估为无回声则返回状态
为避免这种情况,请使用不同的分隔符号而不是空格\/(:;
等。
@echo off
set firstvar= ^^^<o
set secondvar= ^^^^. .^^^^
echo.
echo:%firstvar%
echo:%secondvar%
pause
答案 1 :(得分:0)
首先,阅读Why is no string output with 'echo %var%' after using 'set var = text' on command line?上的答案,了解为什么建议在为环境变量分配内容时使用语法set "variable=value"
。
其次,阅读Microsoft有关Using Command Redirection Operators的文章,了解Windows命令行中<
的含义。
第三,插入字符^
被Windows命令解释器解释为转义字符,如许多编程和脚本语言的反斜杠字符\
。
因此,具有直接环境变量扩展的批处理代码应编码为:
@echo off
set "firstvar= ^<o"
set "secondvar= ^^. .^^"
echo/
echo %firstvar%
echo %secondvar%
echo Okay!
使用延迟扩展更容易编码要输出的字符串:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "firstvar= <o"
set "secondvar= ^. .^"
echo/
echo !firstvar!
echo !secondvar!
echo Okay^^!!
endlocal
^
和<
不得在双引号字符串中进行转义,并且延迟扩展用于输出环境变量的字符串。
注1:在firstvar
行之后,两个环境变量secondvar
和endlocal
不再存在,这通常是批处理中的最后一行文件使用setlocal
。有关命令 SETLOCAL 和 ENDLOCAL 的详细信息,请阅读this answer。
注2:百分号%
必须与另一个%
进行转义,而不能与^
一起转义为字面百分号,而不是开头/ /在命令行预处理期间扩展的环境变量引用的结尾,或者在运行命令行之前以(
开头并以匹配)
结束的整个命令块。
注3:任何包含感叹号!
的目录/文件名的字符串在启用延迟扩展时会被解释为不同。然后,感叹号被解释为在预处理命令行/块之后延迟的环境变量引用的开始/结束。 !
必须使用延迟扩展!
进行转义才能被解释为文字字符。并且感叹号必须另外转义,^
本身就会被转义为^
,以防感叹号输出不在双引号字符串中。
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
cmd /?
... Windows命令解释程序echo /?
endlocal /?
set /?
setlocal /?
另请阅读DosTips论坛主题ECHO. FAILS to give text or blank line - Instead use ECHO/为什么最好使用echo/
代替echo.
输出空行。
最后阅读Debugging a batch file,了解如何在预处理每个命令行/块后查看命令解释器的实际执行情况。