检查批处理文件中的空字符串

时间:2018-08-28 14:54:52

标签: batch-file

我正在学习批处理脚本,并且复制了示例如何检查是否为空:

@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:

我在第二,第三和第五(最后)行的末尾删除了一些空格,现在一切都按预期工作了,怎么回事?

1 个答案:

答案 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%以避免将不显示尾随空格的值分配给环境变量。