2017-02-11 23 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=" 
相關問題