有没有人在Windows Batch中有一个无法用于变量的所有字符的列表?

时间:2017-09-23 18:57:11

标签: batch-file

当我尝试创建变量时,有时在用%包围时不会回想起来。一个例子是

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?任何帮助将不胜感激,谢谢。

2 个答案:

答案 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行之后,两个环境变量secondvarendlocal不再存在,这通常是批处理中的最后一行文件使用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,了解如何在预处理每个命令行/块后查看命令解释器的实际执行情况。