在批处理文件中重定向到文件之前不能使用点

在批处理文件中重定向到文件之前不能使用点

我无法说出为什么上下文if会改变我运行相同代码的能力。

虽然这样:

@SET FILE_MAIL_BODY=mail.body
@echo The build FAILED because of a lock on the 'classes' folder (or its subfolders).>%FILE_MAIL_BODY%

运行以下代码片段,效果很好:

@SET retval=%ERRORLEVEL%
if %retval% == 1 (
    @SET FILE_MAIL_BODY=mail.body
    @echo The build FAILED because of a lock on the 'classes' folder (or its subfolders).>%FILE_MAIL_BODY%  
)

失败并显示以下消息:

. was unexpected at this time.

,除非我删除.之后的subfolders

答案1

您必须使用插入符号来转义命令 ()中的开括号和闭括号字符(见下文),因此它将是:。ECHO^@echo The build FAILED because of a lock on the 'classes' folder ^(or its subfolders^).>%FILE_MAIL_BODY%

@SET retval=%ERRORLEVEL%
if %retval% == 1 (
    @SET FILE_MAIL_BODY=mail.body
    @echo The build FAILED because of a lock on the 'classes' folder ^(or its subfolders^)^.>%FILE_MAIL_BODY%  
)

更多资源

  • 某些字符对命令行有特殊含义。除非使用插入符号 ^ 进行转义,否则无法使用 ECHO 命令将它们打印为文本:
  • SO-批量字符转义
  • 转义字符
  • 转义符、分隔符和引号

  • 在 Windows 批处理文件中呼应括号

    事实上,这不仅仅与括号有关。它与脚本引擎在执行命令之前会严格解释的几乎所有内容有关:变量标记(百分号)、重定向符号、括号、双引号、与号……

    我最常见的情况是这样的:

    @echo off
    
    echo Doing something (very important)...
    

    把这个放到批处理文件中,运行它,你会得到一条消息说

    ... was unexpected at this time.
    

    不,真的吗?引擎尝试在回显中评估表达式,这很好,但这次我需要更简单的东西:嵌入文本消息中的圆括号。就是这样。拜托。

    谢天谢地,有一个“治愈方法”:可以用插入符号来转义括号。

    @echo off
    
    echo Doing something ^(very important^)...
    

    现在我们很好:

    Doing something (very important)...
    

    插入符号可用于转义几乎任何特殊字符,甚至是换行符 - 将单个命令拆分成多行。

    来源

相关内容