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

[问题求助] PowerShell将Csv文件某列中的数字补全空位

[复制链接]
发表于 2022-1-26 12:07:55 | 显示全部楼层 |阅读模式
将csv文件的第一列中的数字,扩充为N位数, 可以指定第一位从i数字开始
用重命名软件可以很容易实现, 想知道如果用Ps实例, 提前感谢!

例如:
位数: $n=4 则表示扩充为4位数
数字: $i=2 则表示第一位从2开始
期待的结果:
排序,语言,歌手,歌名
2001,国语,付雪,金玉良缘
2002,国语,阿吉太组合,阿衣莫
2003,国语,洛先生,孤城
...
2010,国语,乔佳旭,雪下的时候
-------------------------------------
a.csv 示例:

排序,语言,歌手,歌名
1,国语,付雪,金玉良缘
2,国语,阿吉太组合,阿衣莫
3,国语,洛先生,孤城
4,国语,刘艺雯,听闻远方有你
5,国语,海来阿木,五十年以后
6,国语,海来阿木,浮生记
7,国语,杨小壮,最后的人
8,国语,莫叫姐姐,你能不能不要离开我 (莫叫语版)
9,国语,郁可唯,路过人间
10,国语,乔佳旭,雪下的时候
发表于 2022-1-26 15:46:03 | 显示全部楼层
本帖最后由 idwma 于 2022-1-26 15:57 编辑
  1. gc a.csv|%{if($_ -match '^(\d+)(\,.*)'){"{0}{1}" -f ([int]("$i"+"$("{0:d$($n-1)}" -f 0)")+[int]$matches[1]),$matches[2]}else{$_}}
复制代码
发表于 2022-1-26 17:01:31 | 显示全部楼层
本帖最后由 for_flr 于 2022-1-26 17:26 编辑
  1. $i=2
  2. $n=4
  3. $f=gc a.csv
  4. $new=for($a=0;$a -le $f.count;$a++){
  5. if($f[$a] -match "^\d"){
  6. "{0}{1:d$($n-1)}{2}{3}" -f $i,[int]$f[$a].split(',',2)[0],',',$f[$a].split(',',2)[1]
  7. }else{$f[$a]}
  8. }
  9. sc a_new.csv $new
复制代码

评分

参与人数 1技术 +1 收起 理由
5i365 + 1 技术牛x, 乐于分享!

查看全部评分

发表于 2022-1-26 17:05:47 | 显示全部楼层
回复 2# idwma


    http://www.bathome.net/redirect. ... 0888&ptid=61393
你好,我在你这个帖子看到$1的用法,方便讲解一下吗?
发表于 2022-1-26 17:11:05 | 显示全部楼层
回复 4# for_flr
  1. https://docs.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_regular_expressions
复制代码

评分

参与人数 1技术 +1 收起 理由
5i365 + 1 技术牛x, 乐于分享!

查看全部评分

 楼主| 发表于 2022-1-26 17:14:46 | 显示全部楼层
回复 3# for_flr


    这个执行后, 全都变成了 2 后面还重了
 楼主| 发表于 2022-1-26 17:16:22 | 显示全部楼层
回复 2# idwma


    执行后一直跑红代码
发表于 2022-1-26 17:18:45 | 显示全部楼层
回复 7# 5i365


    $i$n这两变量没加上吗?
 楼主| 发表于 2022-1-26 17:19:58 | 显示全部楼层
回复 2# idwma


    我找到一种, 源文件, 输出文件, 还有代码文件, 都使用utf8代码来执行的方法, 在批处理命令前,加上下面两行:
  1. #@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
  2. $OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
复制代码
 楼主| 发表于 2022-1-26 17:23:35 | 显示全部楼层
回复 8# idwma


    感谢大侠提醒, 加上后, 就OK了!

但是代码太精简了, 看不懂
发表于 2022-1-26 17:29:45 | 显示全部楼层
回复 5# idwma
谢谢,我误以为是powershell里面的用法。


    回复 6# 5i365
已修改。
 楼主| 发表于 2022-1-26 17:32:43 | 显示全部楼层
回复 2# idwma


    不知道为什么, 在bat里加上下面两行不能生效, 执行后, 也不显示 : 按任意键退出, 生成的也不是utf8
#@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
 楼主| 发表于 2022-1-26 17:54:21 | 显示全部楼层
回复 11# for_flr


    我想实现, 源文件和输出的文件, 都是utf8, 但是不去找,去修改 gc 和 sc 的地方的编码, 能实现吗?
加下面的两种代码, 都不行, 编码问题, 实在太麻烦了
1.
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
2.
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
发表于 2022-1-26 18:04:32 | 显示全部楼层
回复 13# 5i365


    sorry,我很少遇到编码问题,没关注过这些。
发表于 2022-1-26 19:01:09 | 显示全部楼层
回复 12# 5i365
  1. https://docs.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_character_encoding
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 07:43 , Processed in 0.090091 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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