2015-11-28 81 views
0

我想讓用戶輸入數字,如果他們錯過了一個我希望程序刪除錯誤消息。但是,如果未定義不起作用。這個批處理文件有什麼問題

set /p aa=a11: 
set /p ba=a12: 
set /p ba=a12: 
set /p ab=a21: 
set /P bb=a22: 
cls 
echo antra matrica 
echo. 
set /p qq=b11: 
set /p wq=b12: 
set /p qw=b21: 
set /P ww=b22: 
for %%A IN (%aa%, %ba%, %ab%, %bb%, %qq%, %wq%, %qw%, %ww%) DO IF [%%A]==[] goto error 

它忽略了for命令。當所有變量都輸入空白時,我能做些什麼來使其工作?

+3

'對於%% A IN(aa,ba,ab,bb,qq,wq,qw,ww)DO IF NOT DEFINED %%轉到錯誤' – Aacini

回答

0

只是一個不同的方法:

set Count=0 
for %%A IN (%aa%, %ba%, %ab%, %bb%, %qq%, %wq%, %qw%, %ww%) DO set /a Count+=1 
if %Count% neq 8 goto error 

這需要一個事實,即一個未定義的變量不會與for處理的優勢(這是你原來的代碼問題)

另一個優點是,現在你可以知道,有多少變量被正確定義(如果你想知道)

+0

謝謝:)它helpt –

+0

順便說一句:你可以刪除逗號或空格(連續的分隔符被視爲一個)但他們不打擾,你也可以離開這兩個更好的readabiltiy。 – Stephan

0

Aacini的解決方案將工作,但有兩個問題是:

  1. 爲什麼沒有「如果沒有定義」工作?

  2. 爲什麼你沒有發佈的命令工作?

正如你所提供的,cmd會解釋for命令

for %%A in (aas_value, bas_value, abs_value, ...) do if 

所以有您輸入4,沒什麼,5,6 ......然後在命令行是

for %%A in (4, , 5, 6...) do if 

SPAC È被視爲分離器,因此這將在被解析爲

爲%% A(4 separatorsequence separatorsequence 6 ...)做,如果

因此缺少的值 - 呃,失蹤了。

如果你使用...%var%...if...defined則由於456沒有定義的環境變量,你會得到「如果沒有定義的」演技意外(即「不工作,我所期望的方式,但有保持自己「)

另一種方法是

for %%A IN ("%aa%", "%ba%", "%ab%",...) DO IF [%%~A]==[] goto error 

這將被解讀爲

爲%% A IN( 「4」 separatorsequence 「」 separatorsequence 「5」,...)DO IF [%%〜A] == []轉到錯誤

這裏,"4","","5"將分別指定爲%%A - 包括引號。代字號()刪除封閉的引號,因此[%%~A]將按照預期評估爲[]

+0

謝謝你。 :) –