这个批处理文件可能有什么问题

时间:2015-11-28 19:54:32

标签: windows batch-file

我试图让用户输入数字,如果他们错过了一个,我希望程序丢弃错误信息。但是,如果没有定义不起作用。

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命令。当所有变量输入空白时,我该怎么做才能使它工作?

2 个答案:

答案 0 :(得分:0)

Aacini的解决方案可行,但仍有两个问题:

  1. 为什么没有“如果没有定义”工作?

  2. 为什么你发布的命令不起作用?
  3. 正如您提供的那样,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,那么自456未定义环境变量后,您将获得“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处理未定义的变量(这是原始代码的问题)

另一个优点是,现在你可以知道,有多少变量被正确定义(如果你想知道)