powershell - 将for循环的变量插入另一个变量名
问题描述
我正在尝试简化我的同事所做的 Windows 界面脚本,他在其中使用了很多 if 循环,我认为可以使用 for 循环进一步缩短这些脚本。
基本上,我们有几组计算机,每组 4 到 12 台不等,我们为每个管理员提供一个界面来恢复他们各自的快照。
我希望用 for 循环中的 $i 值替换每个变量中的数字。
我尝试过使用数组和哈希表,但根据我收集到的内容,它们更适合存储值而不是包含其他变量的公式。
if($ComputerNumber -eq 4) {
$checkBoxComputer1LocX = $leftMargin
$checkBoxComputer1LocY = [int]$labelSubHeaderLocY + [int]$buttonHeight + [int]$padding
$checkBoxComputer2LocX = $leftMargin
$checkBoxComputer2LocY = [int]$labelSubHeaderLocY + [int]$buttonHeight + [int]$padding + (1 * ([int]$checkBoxHeight + [int]$padding))
$checkBoxComputer3LocX = $leftMargin
$checkBoxComputer3LocY = [int]$labelSubHeaderLocY + [int]$buttonHeight + [int]$padding + (2 * ([int]$checkBoxHeight + [int]$padding))
$checkBoxComputer4LocX = $leftMargin
$checkBoxComputer4LocY = [int]$labelSubHeaderLocY + [int]$buttonHeight + [int]$padding + (3 * ([int]$checkBoxHeight + [int]$padding))
}
这就是我想要实现的目标:
for($i=1; $i -le $ComputerNumber; i++) {
$checkBoxComputer$iLocX = $leftMargin
$checkBOxComputer$iLocY = [int]$labelSubHeaderLocY + [int]$buttonHeight + [int]$padding + (($i - 0) * ([int]$checkBoxHeight + [int]padding))
}
解决方案
要使用变量间接(通过存储在另一个变量中的名称来引用变量)进行赋值,请使用Set-Variable
(对于检索,您将使用Get-Variable
):
for($i=1; $i -le $ComputerNumber; i++) {
Set-Variable -Name checkBoxComputer${i}LocX -Value $leftMargin
Set-Variable -Name checkBoxComputer${i}LocY -Value ([int]$labelSubHeaderLocY + [int]$buttonHeight + [int]$padding + (($i - 0) * ([int]$checkBoxHeight + [int]padding)))
}
请注意变量的名称$i
是如何包含在{...}
( ${i}
) 中的,以便明确地描述它,以便后续字符不被视为名称的一部分。
但是,您绝对可以使用数组和自定义对象而不是单个变量,这是更可取的:
[array] $checkBoxes = for($i=1; $i -le $ComputerNumber; i++) {
[pscustomobject] @{
LocX = $leftMargin
LocY= [int]$labelSubHeaderLocY + [int]$buttonHeight + [int]$padding + (($i - 0) * ([int]$checkBoxHeight + [int]padding))
}
}
上面创建了一个(0
基于 -index 的)自定义对象数组,每个对象都有一个.LocX
and.LocY
属性,因此,例如,您可以访问第一个复选框的.LocX
值,如下所示:
$checkBoxes[0].LocX
推荐阅读
- c# - 索引超出数组范围
- ethereum - 使用 web3.py 调用自定义以太坊回退函数
- java - 如何在spring redis实体中使用复合键作为id相当于@embedded id
- python - 如何从另一个列表中获取列表中某些单词的匹配项?
- wordpress - 站点地图未重定向到 HTTPS
- timezone - Swift 4 检查 DST 是否适用于给定时区?
- java - 片段中的捆绑为空
- image - chrome的“另存为图像”如何在内部工作?
- node.js - Busboy 在 Firebase 的 uploadImage 函数中需要它时似乎导致内部服务器错误
- javascript - Laravel:Stripe 集成不会出现信用卡字段