cmd/DOS批处理脚本中变量周围的方括号表示法

Jim*_*Jim 8 cmd batch-file

我已经看到cmd批处理脚本使用方形符号来包围变量.例如:

@echo off
if [%1]==[] (
echo no parameter entered
) else (
echo param1 is %1
)
Run Code Online (Sandbox Code Playgroud)

这样做的目的是什么?

Ste*_*han 11

它用于正确的语法.试想一下,如果变量是空的,你想检查一下:

if %var%== echo bla
Run Code Online (Sandbox Code Playgroud)

显然会失败.(语法错误)

代替:

if "%var%"=="" echo bla
Run Code Online (Sandbox Code Playgroud)

工作良好.

另一个"坏事":你想检查一个变量,但它可能是空的:

if %var%==bla echo bla
Run Code Online (Sandbox Code Playgroud)

如果%var%不为空,则效果很好.但如果它空的,该行将被解释为:

if ==bla echo bla
Run Code Online (Sandbox Code Playgroud)

显然是一个语法问题.但

if "%var%"=="bla" echo bla
Run Code Online (Sandbox Code Playgroud)

将被解释为

if ""=="bla" echo bla
Run Code Online (Sandbox Code Playgroud)

正确的语法.

而不是"你可以使用其他字符.有些人喜欢[%var%], 有些人使用!.有些人只使用一个字符而不是围绕字符串if %var%.==. .最常见的是围绕着"(因为如果var包含一个不带引号的毒药字符,例如&.它会不会失败),但这取决于个人的阵风.

*)感谢dbenham,这是一个非常重要的信息

  • @Jim - 使用`[%var%] == [value]`没有任何好处.它的效果和`%%var%[==] value [`或`XXX%var%== XXXvalue`一样好.使用"%var%"=="value"`有一个好处,因为如果var包含像&这样的不带引号的毒药字符,它就不会失败. (6认同)