批处理文件:使用嵌套循环中的列表元素
我一直在试图获得批处理脚本的工作,看起来像我需要问一个在批处理方面有更多专业知识的人,因为我没有任何线索,为什么它保留不工作。我的目的是获取列表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
,所以就显得无用武之地....
回答:
您的问题似乎是%%i
和%i%
完全是不同变量。您不能将值分配给%%i
- 只有for
命令可以。
您似乎试图执行插入排序来构建排序的字符串列表。您的代码结构可能是编辑遗留下来的问题,但在发布后,该例程将通过流程重新输入。此外,由于例程:test
被包含在setlocal/endlocal括号中,所以在:test
例程之外将不会看到对list
的更改。并且连续有两个setlocal
命令创建两个嵌套的本地环境。 两个的选项可以在一个setlocal
声明中同时指定。需要注意的是setlocal
是不是交换机 - 它建立了一个本地环境(是的,微软已经要求建立delayed expansion
等作为像echo on/off
独立的马桶盖式操作)
另外请注意,您生成的列表中包含一个前导空格。我注视着下面的替代例程想法:
REM
SET "list2=" for %%i in (%*) do (
REM %%i has each element in turn
SET "startlist= "
SET "endlist= "
IF defined list2 for %%j in (!list2!) do (
IF "%%j" lss "%%i" (
SET "startlist=!startlist!%%j "
) ELSE (
SET "endlist=!endlist!%%j "
)
)
SET "list2=!startlist!%%i!endlist:~0,-1!"
)
ECHO "List2:" %list2%+
(我已经添加了+
到最后显示的字符串list2
结束
。是 - 在原始问题中指定所需的输出使问题容易解决
:test SETLOCAL
SET "List="
for %%i in (%*) do (
if %fst% equ %%i (SET "List=!List! %scnd%"
) ELSE (
if %scnd% equ %%i (SET "List=!List! %fst%"
) ELSE set List=!List! %%i
)
echo "List: " !List!
)
ENDLOCAL
goto :eof
我假设缺少信息,否则保证fst
和scnd
都保证在输入中只出现一次。
以上是 批处理文件:使用嵌套循环中的列表元素 的全部内容, 来源链接: utcz.com/qa/265467.html