2015-09-09 66 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! 
    ) 
相關問題