Powershell to choose a random letters based on the given count and dynamically assign each to a unique variable?
如何使用 Powershell 根据给定的计数选择一个随机字母并将每个字母动态分配给一个唯一变量?
我有以下代码,但我不确定如何执行上述操作,请问有什么想法吗?
1
2 |
$Count =3
$a = Get–Random -InputObject ‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’,‘h’,‘i’,‘j’, ‘k’, ‘l’, ‘m’,‘n’ -Count $Count |
我希望每个字母的输出存储在 3 个不同的变量中,例如 Ar1、Ar2 和 Ar3(如果 $Count = n,则以此类推 Arn)
- 一般来说,以编程方式创建变量是一个非常糟糕的想法。您已经在数组中有 3 个值。该数组很容易知道 – 没有”该值所在的 $Var 的名称是什么?”。 [咧嘴]如果你想解决这些值,使用数组索引 – $A[1] – 来获取数组中的第二个项目。
- 欢迎来到堆栈溢出!其他用户将您的问题标记为低质量和需要改进。我重新措辞/格式化您的输入,使其更容易阅读/理解。请查看我的更改以确保它们反映您的意图。如果您对我有其他问题或反馈,请随时给我留言。
- 但我同意上述观点:动态创建变量名没有意义。
- 请退后一步,描述您要解决的实际问题,而不是您认为的解决方案。为什么您认为所选字母需要单独的变量?使用单个变量会解决什么问题,而使用您已经拥有的数组变量则不会?
- 我正在用 python 开发一个聊天机器人。 (我对 PS 很陌生,因此寻求帮助)。 Bot 将询问用户要求在 python 中开发一个简单的数学程序(例如添加),了解用户想要添加多少个数字。因此,如果 $Count 为 3,则需要自动(/随机)选择三个不同的变量并在 python 代码中动态使用为”$Arn = Int(input(“Enter the number”)) #(where ‘n’是 $Count 用户键入的)。我敢打赌,你要么认为这整件事很傻,要么你会感激我;)。
- Python 有围绕它构建的 API 代码来与其他应用程序交互。我使用 Powershell 执行一些基本操作(在我的 Windows 笔记本电脑上本地),以证明机器人基于用户输入开发简单数学的概念。
- 这是我之前写的关于”变??量变量”(名称发生变化的变量)的答案,解释了它们为什么无用(如果您不知道变量名称是什么,则无法在源代码中编写变量名称),您如何如果你必须(New-Variable cmdlet),可以制作它们,你还可以使用什么,并链接到一堆相关问题.. stackoverflow.com/a/40477933/478656
- @Sammy123 – 请通过使用数组为自己节省一场可怕的灾难。要求 $Count 个条目,将它们存储在一个数组中,遍历数组以采取适当的行动。事先不知道 $Var 名称正在积极寻求使您的代码混乱。使用数组——这就是数组的用途。 [咧嘴笑]
如果你真的需要不同的变量($Ar1, $Ar2, … $Ar<n>),这里是最简洁的解决方案:
1
2 3 4 |
$iref = [ref] 1
$Count = 3 Get–Random -InputObject ([char[]] (([char] ‘a’)..([char] ‘n’))) -Count $Count | New-Variable -Force -Name { ‘Ar’ + $iref.Value++ } |
注意:([char[]] (([char] ‘a’)..([char] ‘n’))) 是缩写
‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’, ‘k’, ‘l’, ‘m’,’n’.
在 PowerShell Core 中,您可以简单地使用 (‘a’..’n’).
还要注意 -Name 参数 – 要创建的变量的名称 – 是如何通过脚本块动态计算的。
在脚本块的这种所谓的延迟绑定用法中,它在子变量范围内运行,因此需要使用 [ref] 实例来引用调用方范围内的序列号 $iref。
相比之下,您传递给 ForEach-Object 和 Where-Object cmdlet 的脚本块直接在调用者的范围内运行。
此 GitHub 问题中讨论了这种令人惊讶的差异。
试试这样的
1
2 3 4 5 6 7 8 9 10 11 |
$Count =3
$a = Get–Random -InputObject ‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’,‘h’,‘i’,‘j’, ‘k’, ‘l’, ‘m’,‘n’ -Count $Count for ($i = 0; $i -lt $a.Count; $i++) #use $Current for your traitment |
- 非常感谢 Esperento57 !!欣赏它。但是,我仍在寻求完善满足我实际要求的代码。
我是新来的,但我设法创建了一个脚本,该脚本从字符列表中返回一个随机字符,如果要返回多个字符,您还可以从中选择更多值。 powershell 的 Get-Random 内置函数使它变得更容易
1
2 3 |
$select = 1
$Mood = Get–Random -InputObject ‘b’, ‘d’,‘g’,‘p’,‘s’,‘y’ -Count $select Write-Output $Mood |
首先,我同意 Lee_Dailey 的观点,即创建这样的变量不是一个好主意..
但是,它可以这样做:
1
2 3 4 5 6 7 8 |
$Count = 3
$a = Get–Random -InputObject ‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’,‘h’,‘i’,‘j’, ‘k’, ‘l’, ‘m’,‘n’ -Count $Count for ($i = 0; $i -lt $a.Count; $i++) { |
Note that for this to work, you must first remove the possible
already existing variable with that name, which can lead to unforeseen
problems in the rest of your code.
要查看创建的内容,您可以使用 Get-Variable ‘Ar*’ 将显示如下内容:
1
2 3 4 5 6 |
Name Value
—- —– Ar1 m Ar2 d Ar3 j args {} |
来源:https://www.codenong.com/52983013/