找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: 5i365

[问题求助] PowerShell对比两个CSV文件后, 在重复的项后面,加一列

[复制链接]
发表于 2022-1-20 11:32:40 | 显示全部楼层
回复 15# 5i365
  1.   gc a.csv|%{if((gc b.csv) -match "^\d" -contains $_){"$_,已完成"}else{$_}}
复制代码

评分

参与人数 1技术 +1 收起 理由
5i365 + 1 技术牛X, 乐于帮忙

查看全部评分

 楼主| 发表于 2022-1-20 11:43:04 | 显示全部楼层
回复 16# for_flr


    我的a.csv 有3000行, b有200行, 执行时间有点长, 有能快点的方法吗? 批处理执行的很快
发表于 2022-1-20 11:49:23 | 显示全部楼层
有,gc a.csv -readcount 0
|%{}处理改作for循环
你可以琢磨一下,我下班放假了 :lol
 楼主| 发表于 2022-1-20 12:05:24 | 显示全部楼层
回复 18# for_flr


    感谢提醒,

不太懂foreach和for在这里怎么转换, 有路过的大侠, 帮试一下
发表于 2022-1-20 15:36:40 | 显示全部楼层
还可以试试哈希表的方式
  1. $f=gc a.csv
  2. $a=@{}
  3. $rex={[int]($_ -replace '^(\d+),.*','$1')}
  4. $f[1..$f.count]|%{$a+=@{$(&$rex)=$_}}
  5. (gc b.csv)[1..$f.count]|%{if($a.contains($(&$rex))){$a[$(&$rex)]=$a[$(&$rex)]+',已完成'}}
  6. sc c.csv ($f[0],$(do{$a[++$bcc]}while($a[$bcc] -ne $null)))
复制代码

评分

参与人数 1技术 +1 收起 理由
5i365 + 1 高效, 乐于分享! 感谢!

查看全部评分

 楼主| 发表于 2022-1-20 18:19:12 | 显示全部楼层
回复 20# idwma


    牛X 这个执行速度快多了, 为什么?
发表于 2022-1-20 19:44:05 | 显示全部楼层
回复 21# 5i365


    减少了循环次数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:46 , Processed in 0.027671 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表