powershell 如何利用foreach嵌套批量替换文件的内容

场景有二个csv文件,第一个是dep.csv文件包含2列,第一列是要查找的数据,第二列是要更新的数据,每行匹配,第二个u2.csv文件是要处理的对象,更具第一个csv每行... 场景有二个csv文件,第一个是dep.csv文件包含2列,第一列是要查找的数据,第二列是要更新的数据,每行匹配,第二个u2.csv文件是要处理的对象,更具第一个csv每行的数据,进行一次查找替换工作,直至到最后一行,请教命令该如何写

个人思路 读取dep文件每行数据,然后用set-content 更新,但是系统总是提示Set-Content : 文件“D:\u2.csv”正由另一进程使用,因此该进程无法访问该文件。如果同名文件不行也可以考虑另存为U3.csv

import-csv d:\dep.csv | foreach-object {get-content d:\u2.csv | foreach-object {$_ -replace $_.zw, $_.yw}} | set-content d:\u2.csv
展开
 我来答
shrek175
2012-12-20 · 知道合伙人软件行家
shrek175
知道合伙人软件行家
采纳数:238 获赞数:691
17年IT从业经验,10年top10游戏运营公司技术核心。微软最有价值专家(powershell)。

向TA提问 私信TA
展开全部
我在winos中看过这个问题,你的问题是文件正在使用,同时还有临时变量$_的问题。你的解决方案就是正确的,脚本并不会因为你写成一句而提高效率,有时会造成更大的资源浪费。
嵌套执行的语法是一个用临时变量一个用变量:
$u2=get-content d:\u2.csv
foreach($dep in (import-csv d:\dep.csv)){
$u2=$u2.replace($dep.zw,$dep.yw)
}
$u2|set-content d:\u2.csv
这样单循环就能解决问题。
下面是用嵌套的方式来解决:
$u2=import-csv d:\u2.csv
foreach($dep in (import-csv d:\dep.csv)){
$u2|?{$_.zw -eq $dep.zw}|%($_.zw=$dep.yw)
}
$u2|Export-Csv d:\u2.csv -not -Enc oem
这里还是使用了变量$u2,在变量里修改,然后统一导出。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式