首页 > 解决方案 > 使用批处理脚本在列表中按索引引用元素

问题描述

尝试使用批处理脚本通过索引获取列表中的元素。这是代码:

@Echo off
setlocal EnableDelayedExpansion

set acc[0]=default
set acc[1]=Account_2
set acc[2]=Account_3
set acc[3]=Account_4
set acc[4]=Account_5

if exist interator.txt (
    set /p i=<interator.txt
    echo "read: !i!"
    echo "!acc[%i%]!"
    REM start cmd /c setx AWS_PROFILE !acc[%i%]!
    REM start cmd /k python script.py
    set /A i=i+1
    (echo !i!)>interator.txt
    echo "write: !i!"
) else (
    (echo 0)>interator.txt
)

收到的输出:

"read: 0"
""
"write: 1"

因为 setx 需要关闭 CMD 会话,才能产生影响。我正在尝试一种不同的方法来自动化一些常规的东西。

预期输出:

"read: 0"
"default"
"write: 1"

标签: windowsbatch-filecmd

解决方案


@Echo off
setlocal EnableDelayedExpansion

set "acc[0]=default
set "acc[1]=Account_2"
set "acc[2]=Account_3"
set "acc[3]=Account_4"
set "acc[4]=Account_5"

if exist q65771965.txt (
    set /p i=<q65771965.txt
    echo "read: !i!"
    FOR %%a IN (acc[!i!]) DO (
     ECHO "!%%a!"
     echo start cmd /c setx AWS_PROFILE "!%%a!"
     echo start cmd /k python script.py
    )
    set /A i=i+1
    (echo !i!)
    echo "write: !i!"
) else (
    (echo 0)
)

GOTO :EOF

好的 - 允许它在我的测试环境中工作的小改动:

将文件名从更改interator.txtq65771965.txt(适合我的环境)

删除了数据文件的更新,因此修改显示在屏幕上。

替换REM start为在屏幕上ECHO start显示命令。start

微妙的面向语法的更改:set "var1=data"用于设置值 - 这避免了尾随空格引起的问题。

重大变化:插入一个for循环以将间接值传输到元变量 ( %%a) 并使用它们。

可能需要:我用setx的不多,但我对这个论点有一些记忆"quoted"


推荐阅读