【发布时间】:2017-05-23 15:57:40
【问题描述】:
我正在编写一个 powershell 脚本,它接收存储在 csv 文件中的电话号码。 csv 文件有一个“taken”字段,表示电话号码是否在使用中。现在,我有一个简单的 foreach 循环,它读取所取字段的值并将no 更改为yes:
Import-Csv '\\papertransport.com\files\UserDocuments\mneis\Code\phone_numbers2.csv' | ForEach-Object
{
if ($_.taken -eq 'no')
{
$_.taken = 'yes'
break
}
$_
} | Export-Csv \\papertransport.com\files\UserDocuments\mneis\Code\phone_numbers.csv -NoTypeInformation
我的问题是:我怎样才能得到它,以便循环在遇到第一个否时停止?中断显然不起作用。此外,是否可以写入同一个 csv 文件而不是写入第二个文件?当我写入原件时,它会删除其中的所有值。
【问题讨论】:
-
使用
foreach($item in Import-Csv ...){}而不是| ForEach-Object使break语句起作用 -
我试过了,csv文件没有任何变化。
-
你的问题有点不清楚。你到底想完成什么?您是否想要一个 csv 文件,其中只有第一次出现的“否”已更改为“是”,并且每隔一行保持不变?
-
@MathiasR.Jessen 抱歉,如果有点不清楚。基本上,我希望它循环遍历 csv 文件,并在所取列中的“否”时停止,将其从循环中断开,其余的“否”保持不变。然后它将“否”更改为“是”,以便下次迭代 csv 文件时将执行相同的操作,这一次传递先前更改的“否”。这有意义吗?
标签: powershell csv