2015-09-09 67 views
0

感谢Aacini,我现在有一种方法可以将变量从最大到最小排序。批处理:检查是否有任何变量是相等的

链接: Comparing and ordering multiple numbers in batch

但是,如果2个或更多我的变量的值是相同的,他们不会进行排序。我试着测试一下这个集合中的两个变量是否相等。我试着用if语句对每个变量进行任意组合,但我认为这并不是非常有效,而且很难改变。

有没有办法实现这个目标?

@echo off 
setlocal EnableDelayedExpansion 

set speed1=190 
set speed2=78 
set speed3=78 
set speed4=23 

rem Get the descending order of previous elements via "order" array 
for /L %%i in (1,1,4) do (
    set /A num=1000-speed%%i 
    set order!num!=%%i 
) 

rem Show the elements of "speed" array in descending order 
for /F "tokens=2 delims==" %%i in ('set order') do (
    echo speed%%i = !speed%%i! 
) 

输出将只显示:

speed1 = 190 
speed3 = 78 
speed4 = 23 
+0

你是什么意思,“如果他们任何人都等于另一个”?如果集合中的两个变量相等?或者,如果集合中的任何变量等于外部变量? – Aacini

+0

如果集合中的两个变量相等。对不起,可怕的解释,我会尝试编辑我的帖子来解决这个问题。 –

回答

1

对不起。我不知道你是否真的有兴趣知道两个元素是否具有相同的值,或者只是为了解决我以前的解决方案(不包括具有相同值的元素)的错误,所以我选择了解决以前bug:

@echo off 
setlocal EnableDelayedExpansion 

set speed1=190 
set speed2=78 
set speed3=78 
set speed4=23 

rem Get the descending order of previous elements via "order" array 
REM Insert a second index to differentiate elements with the same value 
for /L %%i in (1,1,4) do (
    set /A num=1000-speed%%i 
    set order[!num!][%%i]=%%i 
) 

rem Show the elements of "speed" array in descending order 
for /F "tokens=2 delims==" %%i in ('set order') do (
    echo speed%%i = !speed%%i! 
) 
+0

我有兴趣找到一种方法来检查两个元素是否具有相同的值,因此我可以将该代码插入到您以前的答案中。我不知道你以前的答案有一个错误;我认为2个相同的值不能使用顺序数组排序。这解决了我的问题。谢谢。 –

0
@echo off 
    setlocal enableextensions enabledelayedexpansion 

    set speed1=190 
    set speed2=78 
    set speed3=78 
    set speed4=23 

    for /f "usebackq tokens=1,2 delims=/" %%a in (` 
     cmd /q /e /c "for /f tokens^=1^,2^ delims^=^= %%c in ('set speed') do (set /a %%d + 10000000 & echo /%%c)" 
     ^| sort /r 
    `) do (
     set /a "value=%%a-10000000" 
     echo %%b=!value! 
    ) 
相关问题