windows - 使用批处理脚本在列表中按索引引用元素
问题描述
尝试使用批处理脚本通过索引获取列表中的元素。这是代码:
@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"
解决方案
@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.txt
为q65771965.txt
(适合我的环境)
删除了数据文件的更新,因此修改显示在屏幕上。
替换REM start
为在屏幕上ECHO start
显示命令。start
微妙的面向语法的更改:set "var1=data"
用于设置值 - 这避免了尾随空格引起的问题。
重大变化:插入一个for
循环以将间接值传输到元变量 ( %%a
) 并使用它们。
可能需要:我用setx
的不多,但我对这个论点有一些记忆"quoted"
推荐阅读
- powershell - 如何在计划任务中执行 Get-CrmConnection
- r - 返回顶点列表
- javascript - 如何通过 YouTube Data API 获取特定帐户(频道)发布的评论?
- javascript - 如何使用jquery触发dataTable搜索窗格的onclick事件?
- c# - 同时缩放两个游戏对象
- java - 如何以 application/x-www-form-urlencoded 在 restTemplate 中发送正文
- reactjs - Django Rest Framework+React app - 只显示一个空白页面,浏览器找不到react前端的静态文件
- c# - Blazor WASM .NET 5 输入时间无法正确显示
- javascript - 如果初始属性是变量,如何访问 JSON 对象的属性?
- python - 使用 python 和 nidaqmx 进行延迟或溢出的数据采集