2017-02-11 20 views
1

空字符串和没有创建变量在批处理文件中有什么不同? 如果他们有任何不同,你能告诉我一个使用空字符串vs没有创建字符串的例子吗?空字符串和没有创建变量之间有什么不同

@echo off 
title Empty String Vs None Created Variable 
set String= 
set variable=exist 
if [%String%] == [] echo its be a Empty String 
if [%variable%] == [] echo its be a Empty String 
if [%none_exist_var%] == [] echo its be a Empty String 

非常感谢!

+0

没有办法定义在批空字符串变量。 'set“var =”'命令_deletes_变量。 – Aacini

+0

@Aacini可以[将变量设置为空](https://en.wikipedia.org/wiki/Batch_file#Null_values_in_variables)。这就是为什么在'if'中比较时需要引号或其他文本的原因,否则如果'%var%'不包含任何内容,则'%var%== text'可能会失败。 [如何在变量中设置/使用空字符串值](http://superuser.com/q/689847/241386) –

+0

@LưuVĩnhPhúc:链接的维基百科文章不清楚。正如我之前所说的,**没有办法在批处理**中使用空字符串定义变量。我邀请你测试这个命令:'if defined var echo Value =“%var%”'并且在得到这个结果时报告:'Value =“'' – Aacini

回答

2

变量在批处理文件可以是

  • 定义:存在存储的值,并且用于检索值的相关联的名称,即,变量名。
  • 未定义:没有任何价值,因此不需要任何关联名称,因此它不存在。

这两个简单的规则处理如何更新环境块(存储变量/值)。如果有值,则环境块将有一个值和名称的检索项。如果没有值,则环境块不会创建条目,或者在将变量设置为空时,条目将被删除。

所以,如果

  • 一个从来没有定义的变量未在环境中的任何条目阻止
  • 有没有值的变量并没有在环境块中的任何条目

没有两种情况之间的任何差异。

:虽然传统的方式来检查,如果变量存储的值/一个变量存在是(为dbenham曾这样评价,这个语法是不是特别建议作为变量值铅,引号里的语法问题

if "%varName%"=="" .... 

如果启用了命令扩展(和默认配置是让他们启用),您还可以使用更安全的替代

if not defined varName .... 
if defined varName .... 

注意,在此语法,因为我们不试图读取变量中的值,则使用varName,不%varName%

+1

我会用“传统”或“历史”而不是“平常”。如果值包含自己的引号,则“if”%varname%“==”“'语法可能会失败。这是'if defined varName'语法被发明出来的主要原因 - 它总是成功,无论价值如何。 '如果“%varName%”==“”'应该被避免。 – dbenham

+0

@dbenham,我使用*通常*的意思是我通常在发布代码中看到的内容,我认为*习惯*。我知道这种用法背后的问题。无论如何,我喜欢所提出的*传统*术语,谢谢。答案已更新。 –

+0

是的,我明白你对“平常”的使用,并没有错。但我更喜欢你的编辑版本:-) – dbenham

1

没有区别。阅读Delete a variable

类型SET只有变量名和等号:

SET _department= 

更妙的是,以确保有是=地方 括号或报价中表达后没有尾随空间:

(SET _department=) 

SET "_department=" 
相关问题