我远没有成为PowerShell的专家,所以我最好在这里解释一下。
我能够添加一个列,但现在我想使用单独的脚本在列(已经存在)中添加内容。
例如,以下CSV文件:
WhenToBuyThings,ThingsToBuy
BuyNow ,Bed
BuyNow ,Desk
BuyNow ,Computer
BuyNow ,Food
BuyLater ,
BuyLater ,
BuyLater ,
我有阵列:
$BuyStuffLater = "Books","Toys","ShinnyStuff"
因此文件的最终结果应如下所示
BuyNow ,Bed
BuyNow ,Desk
BuyNow ,Computer
BuyNow ,Food
BuyLater ,Books
BuyLater ,Toys
BuyLater ,ShinnyStuff
任何有关如何在代码中执行此操作的帮助将非常感激。此外,我们无法使用分隔符","。因为在真实的脚本中,某些值会有逗号。
答案 0 :(得分:1)
经过几个小时的摆弄后我得到了它......
$myArray = "Books","Toys","ShinnyStuff"
$i = 0
Import-Csv "C:\Temp\test.csv" |
ForEach-Object {if($_.WhenToBuyThings -eq "BuyLater"){$_.ThingsToBuy = $myArray[$i];$i++}return $_} |
Export-Csv C:\Temp\testtemp.csv -NoTypeInformation
一切都很好......
答案 1 :(得分:0)
我也是PowerShell的新手。这是我发现的。这将搜索并返回所有适合的行。我不确定它能不能管道。
$BuyStuffLater = "Books","Toys","ShinnyStuff"
$x = 0
Get-Content -Path .\mydata.txt | select-string -pattern "BuyLater" #searches and displays
# Im not sure about this piping. (| foreach {$_ + $BuyStuffLater[$x];$x++} | Set-Content .\outputfile.csv)
这个过滤器可以工作,但我仍然需要处理管道。另一个答案可能会更好。
答案 2 :(得分:0)
我没有看到迭代每个对象以查看它是WhenToBuyThings
是“BuyLater”的要点。如果你运行多次传递添加到列表中,那么你正在做的事情可能是有害的。它可以删除你想要的以前的东西。如果“肾透析机”在WhenToBuyThings
下被列为“BuyLater”,那么您将以可怕的后果覆盖它。
我们可以做的是构建两个列表并合并到新的csv文件中。第一个列表是您的原始文件减去“BuyLater”空白ThingsToBuy
的任何条目。第二个列表是从$BuyStuffLater
构建的对象数组。将这些列表一起添加并导出。
使用Export-CSV
时,无需担心使用逗号分隔符。引用数据,因此数据中的逗号不会影响数据结构。如果这仍然是一个问题,您可以使用-Delimiter ";"
。我在你的回答中注意到你没有试图说明逗号(根据我刚刚说的不重要)。
$path = "C:\Temp\test.csv"
$ListOfItemsToBuy = "Books","Toys","ShinnyStuff: Big, ShinyStuff"
$BuyStuffLater = $ListOfItemsToBuy | ForEach-Object{
[pscustomobject]@{
WhenToBuyThings = "BuyLater"
ThingsToBuy = $_
}
}
$CurrentList = Import-Csv $path | Where-Object{$_.WhenToBuyThings -ne "BuyLater" -and ![string]::IsNullOrWhiteSpace($_.ThingsToBuy)}
$CurrentList + $BuyStuffLater | Export-Csv $path -NoTypeInformation
由于你有3.0,我们可以使用[pscustomobject]@{}
非常容易地构建新对象。只需将两个数组一起添加并导出回原始文件即可组合这两个数组。
你应该注意到我使用了稍微不同的输入数据。一个包括逗号。我这样做,所以你可以看到输出文件的样子。
"BuyLater","Books"
"BuyLater","Toys"
"BuyLater","ShinnyStuff: Big, ShinyStuff"