我正在学习批处理脚本,并且复制了示例如何检查是否为空:
@echo off
SET a=
SET b=Hello
if [%a%]==[] echo "String A is empty"
if [%b%]==[] echo "String B is empty "
但是我得到了这样的错误:
D:\Projects\Temp\BatchLearning>Script.bat
]==[] was unexpected at this time.
出什么问题了?为什么这是指南。过去有效吗?来自here的示例。
UPD:
我在第二,第三和第五(最后)行的末尾删除了一些空格,现在一切都按预期工作了,怎么回事?
答案 0 :(得分:2)
环境变量不能包含空字符串。在完全不给环境变量分配任何东西时,根本不会定义环境变量。
在命令提示符窗口中运行时输出的命令 IF 的帮助说明了语法:
if defined Variable ...
if not defined Variable ...
只要在启动cmd.exe
或运行批处理文件时默认情况下启用了命令扩展名,此方法就起作用。
@echo off
SET "a="
SET "b=Hello"
if not defined a echo String A is empty.
if not defined b echo String B is empty.
方括号对于命令 IF 或Windows命令处理器没有任何意义。但是双引号在定义参数字符串时有一个双引号。因此也可以使用:
@echo off
SET "a="
SET "b=Hello"
if "%a%" == "" echo String A is empty.
if "%b%" == "" echo String B is empty.
但是请注意,"
或a
的字符串值内的双引号字符b
由命令处理器进行扩展,然后执行已解析的命令行,如此处{{1 }}和%a%
会导致命令行语法错误。
也请阅读Why is no string output with 'echo %var%' after using 'set var = text' on command line?的答案,为什么建议使用语法%b%
以避免将不显示尾随空格的值分配给环境变量。