我试图让用户输入数字,如果他们错过了一个,我希望程序丢弃错误信息。但是,如果没有定义不起作用。
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命令。当所有变量输入空白时,我该怎么做才能使它工作?
答案 0 :(得分:0)
Aacini的解决方案可行,但仍有两个问题:
正如您提供的那样,cmd
会将for
命令解释为
for %%A in (aas_value, bas_value, abs_value, ...) do if
所以你输入了4,没有,5,6 ......那么命令行就是
for %%A in (4, , 5, 6...) do if
, 和 Space 被视为分隔符,因此将解析为
for %% A in(4
separatorsequence 5 separatorsequence 6 ...)如果因此失踪的价值 - 呃,失踪了。
如果您使用了
...%var%...
和if...defined
,那么自4
,5
和6
未定义环境变量后,您将获得“if没有定义“意外行动(即”不按我预期的方式工作但是保留给自己“)另一种方法是
for %%A IN ("%aa%", "%ba%", "%ab%",...) DO IF [%%~A]==[] goto error
将被解释为
for %% A IN(“4” separatorsequence “” separatorsequence “5”,...)DO IF [%% ~A] == []转到错误
此处,
"4"
,""
,"5"
将分配给%%A
- 包括引号。波浪号( 〜 )删除了封闭的引号,因此[%%~A]
将按预期评估为[]
。答案 1 :(得分: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
处理未定义的变量(这是原始代码的问题)另一个优点是,现在你可以知道,有多少变量被正确定义(如果你想知道)