String 空字符串和未创建变量之间有什么不同

String 空字符串和未创建变量之间有什么不同,string,batch-file,variables,String,Batch File,Variables,批处理文件中的空字符串和未创建变量之间有什么不同? 如果他们有任何不同,你能给我举一个使用空字符串和非创建字符串的例子吗 @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 [%non

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

@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

非常感谢

没有区别。阅读:

键入
SET
,仅使用变量名和等号:

SET _department=
更好的是,确保
=
位置后没有尾随空格 括号或引号中的表达式:

(SET _department=)

SET "_department="

批处理文件中的变量可以是

  • 已定义:存储一个值,并使用关联名称检索该值,即变量名
  • 未定义:没有值,在连续性中不需要关联的名称,因此它不存在
这两条简单的规则处理如何更新环境块(存储变量/值的位置)。如果存在值,则环境块具有该值的条目和检索该值的名称。如果没有值,则环境块不会创建条目,或者在将变量设置为“无”时,删除条目

那么,如果

  • 从未定义的变量在环境块中没有任何条目
  • 具有not值的变量在环境块中没有任何条目
这两种情况没有任何区别

注意:虽然检查变量是否存储值/a变量是否存在的传统方法是(正如dbenham所评论的,不建议使用此语法,因为变量值内的引号会导致语法问题)

如果“%varName%”=。。。。
如果启用了命令扩展(默认配置是启用它们),您还可以使用更安全的替代方法

如果未定义varName。。。。
如果定义了varName。。。。

注意,在这种语法中,由于我们不试图读取变量中的值,因此使用的是
varName
,而不是
%varName%

,因此无法使用空字符串批量定义变量<代码>设置“var=”命令删除变量。@Aacini可以。这就是为什么在
if
中进行比较时需要引号或其他文本的原因,否则
if%var%==text
如果
%var%
不包含任何内容,则可能会失败@LưuVĩnhPhúc:维基百科的链接文章并不清楚。正如我之前所说的,没有办法用空字符串批量定义变量。我邀请您测试此命令:
如果定义了var echo Value=“%var%”
并在得到此结果时报告:
Value=“
@Aacini我刚刚检查过,因此您可以删除变量,然后将其用作null@LưuVĩnhPhúc:我不明白你最后的评论与这个话题有什么关系。我说过,没有办法在批处理中用空字符串定义变量
set“var=“
命令删除变量,但您在第一条评论中说:“可以将变量设置为null”。这两点是相反的,只有一点是对的(另一点是错的)。你对这个话题还有什么评论吗?我会用“传统的”或“历史的”来代替“通常的”。如果“%varname%”包含自己的引号,则
if=“varname%”语法可能会失败。这就是发明
if defined varName
语法的一个主要原因——无论值是多少,它总是成功的<代码>如果“%varName%”==“应该避免”
。@dbenham,我使用的是我通常在发布的代码中看到的惯常用法。我知道这种用法背后的问题。不管怎样,我喜欢提议的传统术语,谢谢。答案更新了。是的,我理解你使用的“通常”,这并没有错。但我更喜欢你编辑的版本:-)