我一直在试图获得批处理脚本的工作,看起来像我需要问一个在批处理方面有更多专业知识的人,因为我没有任何线索,为什么它保留不工作。我的目的是获取列表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