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 展开
个人思路 读取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 展开
1个回答
2012-12-20 · 知道合伙人软件行家
关注
展开全部
我在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,在变量里修改,然后统一导出。
嵌套执行的语法是一个用临时变量一个用变量:
$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,在变量里修改,然后统一导出。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |