gpt4 book ai didi

powershell - 从CSV创建变量

转载 作者:行者123 更新时间:2023-12-03 01:10:15 25 4
gpt4 key购买 nike

我想从CSV的特定列中创建变量。

CSV将具有以下标题:

FolderName,FolderManager,RoleGroup,ManagerEmail

FolderName下将是具有相应文件夹名称的行的列表,例如: Accounts,HR,Projects等...(这些名称中的每一个都是 FolderName列中的单独行)

因此,我想创建一个变量列表以供以后使用。它们将如下所示:
$Accounts,
$HR,
$Projects,

我在这里和谷歌搜索的基础上做了一些不同的脚本,但无法产生所需的结果。我希望有人可以引导我在正确的方向上创建此脚本。

最佳答案

这个问题的版本(“动态变量”或“变量变量”或“在运行时创建变量”)出现了很多,在几乎所有情况下,它们都不是正确的答案。

这通常是由不知道解决问题的更好方法的人提出的,但是有更好的方法:集合。数组,列表,哈希表等

问题出在这里:您想读取用户名并打印出来。您无法编写Hello Alice,因为您不知道它们的名称要放在代码中。这就是变量存在的原因:

$name = Read-Host "Enter your name"
Write-Host "Hello $name"

太好了,您可以在源代码中编写 $name,这永远不会改变。它引用了他们的名字,但确实有所改变。但是没关系。

但是,您陷入了困境-如果只有 $name,您怎么能拥有两个人的名字?如何创建许多像 $name2$name3的变量?如何制作 $Alice, $Bob

你可以...
New-Variable -Name (Read-Host "Enter your name") -Value (Read-Host "Enter your name again")

Write-Host "Hello

等待

你在那里写他们的名字是什么?您直接回到了变量要解决的原始问题。您在源代码中放了固定的东西,这使您可以使用变化的值。

现在您有各种各样的东西,您无法在源代码中使用,因为您不知道它又是什么。

它一文不值。

解决的方法是,具有固定名称的一个变量可以引用集合中的多个值。

数组 ( Get-Help about_Arrays ):
$names = @()

do {
$name = Read-Host "Enter your name"
if ($name -ne '')
{
$names += $name
}
} while ($name -ne '')

# $names is now a list, as many items long as it needs to be. And you still
# work with it by one name.

foreach ($name in $names)
{
Write-Host "Hello $name"
}

# or

$names.Count

or

$names | foreach { $_ }

还有更多收藏,例如

哈希表 ( Get-Help about_Hash_Tables ):键->值对。让我们将文件夹中的每个文件与其大小配对:
$FileSizes = @{}   # empty hashtable. (aka Dictionary)

Get-ChildItem *.txt | ForEach {

$FileSizes[$_.BaseName] = $_.Length

}

# It doesn't matter how many files there are, the code is just one block

# $FileSizes now looks like
@{
'readme' = 1024;
'test' = 20;
'WarAndPeace' = 1048576;
}

# You can list them with

$FileSizes.Keys

and

foreach ($file in $FileSizes.Keys)
{
$size = $FileSizes[$file]

Write-Host "$file has size $size"
}

不需要每个文件或每个文件名的动态变量。一个固定的名称,一个变量,适用于任意数量的值。您需要做的就是“添加很多”和“处理很多”,而无需明确关心有多少。

您永远不需要问“现在我已经为所有东西创建了变量名……如何找到它们?”因为您在集合中找到了这些值,所以将它们放入。通过列出所有值,从头开始搜索直到找到一个,通过使用 -match-in-contains过滤它们。

是的,New-Variable和Get-Variable有它们的用途,如果您了解集合并想使用它们,也许您确实对它们有用途。

但是我认为很多人在StackOverflow上问这个问题仅仅是因为他们还不了解集合。

Dynamic variables in Powershell

Incrementing a Dynamic Variable in Powershell

Dynamic variable and value assignment in powershell

Dynamically use variable in PowerShell

How to create and populate an array in Powershell based on a dynamic variable?

还有更多,在Python中:

https://stackoverflow.com/a/5036775/478656

How can you dynamically create variables via a while loop?

关于powershell - 从CSV创建变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40477171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com