我无法说出为什么上下文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)...
插入符号可用于转义几乎任何特殊字符,甚至是换行符 - 将单个命令拆分成多行。