簡體   English   中英

批處理:如何在 for 循環中使用帶有變量的數組作為索引?

[英]Batch: How to use an array with a variable as an index inside a for loop?

我的代碼讓客戶輸入一系列單詞(直到客戶輸入“0”),將它們存儲在一個數組中,然后按字母順序對該數組進行排序。 我找到了一種方法,可以通過使用額外的 for 循環來使我的代碼正常工作,但我對這種方法不滿意,請問您還有其他替代方法嗎? (帶有 %%h 的那個)

我的問題來自%%tab[!next!]%%並且我需要再延遲一次,當我使用CALL echo時它有效但我不知道如何處理 if 條件和集合。

先感謝您。

ps:對從 1 開始的數組和 for 循環感到抱歉,但這讓我又跳過了 1 個 goto 和計算循環索引+1 的努力。

@echo off
setlocal enableDelayedExpansion

set /a num=0

:newVar
set /a num+=1
set /p tab[%num%]=Write something: 
if not !tab[%num%]! == 0 goto newVar
set /a num-=1

echo.
echo Array length: %num%
echo.

set varTemp=ERROR
set /a nbTours=%num%-1

FOR /L %%v IN (1 1 %nbTours%) DO (
   echo ***********************************************
   echo.
   set /a nbComparaison=%num%-%%v
   set /a next=1

   FOR /L %%i IN (1 1 !nbComparaison!) DO  (
      set /a next=next+1
      call echo tab[%%i] = !tab[%%i]! . tab[!next!] = %%tab[!next!]%%
      FOR %%h in (!next!) do (
         if !tab[%%i]! GTR !tab[%%h]! (
         echo ________ !tab[%%i]! ^<-^> !tab[%%h]! & echo. 
         set varTemp=!tab[%%h]!
         set tab[%%h]=!tab[%%i]!
         set tab[%%i]=!varTemp!
         )
      )
   )
   echo.
)
echo ***********************************************

echo.
echo result:
FOR /L %%d IN (1 1 %num%) DO  (
   echo tab[%%d] = !tab[%%d]!
)

endlocal
pause

擴展延遲變量以在代碼塊中用作索引的更有效方法是使用簡單for循環:

For %%G in (!next!)Do echo(tab[%%i] = !tab[%%i]! . tab[%%G] = !tab[%%G]!

如果代碼塊中需要多個延遲變量作為索引變量,可以使用for /f循環來擴展和隔離所需的標記。

For /l %%i in (1 1 10) Do (
    Set /A Next=%%i+1,Previous=%%i-1
    For /f "tokens=1,2,3 delims=;" %%G in ("!Pevious!;!Next!;%%i") Do (
        Echo(%%G - %%H - %%I
    )
)

FOR /L %%v IN (1,1,%num%) DO IF (%%v neq %num%) FOR /L %%i IN (%%v,1,%num%) DO IF (%%v neq %%i) IF "!tab[%%v]!" gtr "!tab[%%i]!" (
 SET "vartemp=!tab[%%v]!"
 SET "tab[%%v]=!tab[%%i]!"
 SET "tab[%%i]=!vartemp!"
)

對於每個條目,除了最后一個條目,對於每個剩余條目(具有較高索引的條目)進行比較並在需要時交換。

將剩余條目中最低的放入索引%%v中,直到完成。

請注意,需要在引號中執行字符串比較,以迎合包含空格的條目,並為字符串分配set "var=value" ,以確保分配的值中不包含尾隨空格。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM