我看过使用方括号来包围变量的cmd批处理脚本。例如:
@echo off
if [%1]==[] (
echo no parameter entered
) else (
echo param1 is %1
)
这是什么的目的?
我看过使用方括号来包围变量的cmd批处理脚本。例如:
@echo off
if [%1]==[] (
echo no parameter entered
) else (
echo param1 is %1
)
这是什么的目的?
它用于正确的语法。想象一下,您想检查一个变量是否为空:
if %var%== echo bla
显然会失败。(语法错误)
相反:
if "%var%"=="" echo bla
工作正常。
另一个“坏事”:您想检查一个变量,但它可能为空:
if %var%==bla echo bla
如果 %var% 不为空,则很好地运作。但如果它是空的,则该行将被解释为:
if ==bla echo bla
显然是语法问题。但是
if "%var%"=="bla" echo bla
将被解释为
if ""=="bla" echo bla
正确的语法。
你可以使用其他字符代替"
。有些人喜欢用[%var%]
,有些人用!
或.
有些人只使用一个字符来包围字符串,如if %var%.==.
最常见的是用"
来包围(因为如果变量包含空格或未引用的特殊字符(如&),它不会失败。)*),但这取决于个人口味。
*)非常感谢dbenham提供的这个重要信息。
if %1==[] (
echo no parameter entered
) else (
echo param1 is %1
)
此时不期望出现 (
并退出。
[%var%]==[value]
没有优势。它和]%var%[==]value[
或XXX%var%==XXXvalue
一样有效。使用"%var%"=="value"
的优势在于,如果 var 包含未引用的毒瘤字符(如 &),它不会失败。 - dbenhamvar
包含一个未引用的毒瘤字符,比如"
, 它将会失败。考虑SET var="foo bar"
,它将变成if ""foo bar""==""
; 这很可能会给你一个错误提示bar""=="" was unexpected at this time.
... - jimbobmcgee