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

Bor*_*sov 3 batch-file

我正在学习批处理脚本,我复制了如何检查空的示例:

@echo off 
SET a= 
SET b=Hello 
if [%a%]==[] echo "String A is empty" 
if [%b%]==[] echo "String B is empty "
Run Code Online (Sandbox Code Playgroud)

但我收到这样的错误:

D:\Projects\Temp\BatchLearning>Script.bat
]==[] was unexpected at this time.
Run Code Online (Sandbox Code Playgroud)

什么问题?为什么这是在指南中。过去有用吗?从这里的例子。

更新:

我删除了第 2、3 和 5(最后)行末尾的一些空格,现在一切都按预期工作,这是怎么回事?

Mof*_*ofi 5

环境变量不能有空字符串。环境变量根本没有定义给环境变量。

在命令提示符窗口中运行时命令IF输出的帮助解释了语法:

if defined Variable ...
if not defined Variable ...
Run Code Online (Sandbox Code Playgroud)

只要在启动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.
Run Code Online (Sandbox Code Playgroud)

方括号对命令IF或 Windows 命令处理器没有意义。但是双引号有一个,因为它们定义了一个参数字符串。所以也有可能使用:

@echo off
SET "a="
SET "b=Hello"
if "%a%" == "" echo String A is empty.
if "%b%" == "" echo String B is empty.
Run Code Online (Sandbox Code Playgroud)

但请注意,在执行已解析的命令行之前,命令处理器的"字符串值内的双引号字符ab通过命令处理器进行扩展,如此处执行%a%%b%导致命令行的语法错误。

另请阅读有关为什么在命令行上使用“set var = text”后没有带有“echo %var%”的字符串输出的答案为什么建议使用语法set "Variable=Value"来避免将不显示尾随空格的值分配给环境变量。