我一直在試圖獲得批處理腳本的工作,看起來像我需要問一個在批處理方面有更多專業知識的人,因爲我沒有任何線索,爲什麼它保留不工作。我的目的是獲取列表VAR
的兩個元素被交換:批處理文件:使用嵌套循環中的列表元素
@echo off
rem enable delayed expansion, required for extended usage of environment variables
SETLOCAL EnableDelayedExpansion
SETLOCAL EnableExtensions
set VAR=abcd efgh ijkl mnopq rstvw qwert yxcva rtzewrw yxvys
set fst=qwert
set scnd=rstvw
call :test %VAR%
:test
SETLOCAL
for %%i in (%*) do (
for %%j in (%* %%i) do (
if %scnd% equ %%i (
if %fst% equ %%j (
echo "gotcha before swapping: " "i: " %%i "j: " %%j
set tempor=%%i
set i=%%j
set j=!tempor!
echo "gotcha after swapping: " "i: " !i! "j: " !j!
set List=!List! %%j %%i
)
)
)
set List=!List! %%i
echo "List: " !List!
)
ENDLOCAL
goto :eof
:ende
我試圖讓列表看起來像這樣:
abcd efgh ijkl mnopq qwert rstvw yxcva rtzewrw yxvys
在FST(爲第一要素)和SCND (第二個元素)被交換。
輸出是這樣的:"List: " abcd efgh ijkl mnopq qwert rstvw rstvw qwert yxcva rtzewrw yxvys
,所以我得到的qwert
和rstvw
複式,我知道那是因爲set List=!List! %%i
位置。
至少我知道,交換正在工作。 但我的問題是:如果我把這個在else
分支,因爲我通常會在任何其他的腳本語言來做,列表將充滿在每個循環%%i
和%%j
,所以就顯得無用武之地....
如果你把一個if-else分支/子句中的big for循環(不管它叫什麼),它應該仍然有效。 – Poypoyan
你的意思是由'if%scnd%neq %% i'和'if%fst%neq %% j' ?,'%% i'和'%% j'在這一點上還沒有被初始化,所以我不太明白你的建議是什麼? – user9145300