[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 idwma 于 2022-1-2 17:42 编辑

万能的正则
  1. $a=@{}
  2. type a.csv|%{
  3.     $z=$_ -replace '^(\d+).*','$1'
  4.     if (!($a.ContainsKey($z))){$a.$z=$_}
  5. }
  6. $b=@{}
  7. dir -recu b\* -inc *歌手*.txt,*歌名*.txt|%{
  8.     foreach($i in (type $_) -match '\d+'){
  9.         $z=$i -replace '\D*(\d+)\D*','$1'
  10.         if(!($b.ContainsKey($z))){$b.$z=$a.$z}
  11.     }
  12. }
  13. $b.Values|sort{"{0:d5}" -f [int]($_ -replace '^(\d+)\D*','$1')}
复制代码

TOP

回复 4# 5i365
  1. $a=@{}
  2. $f=[io.file]::ReadAllLines('.\a.csv')
  3. $f|%{
  4.     $z=$_ -replace '^(\d+).*','$1'
  5.     if (!($a.ContainsKey($z))){$a.$z=$_}
  6. }
  7. $b=@{}
  8. dir -recu * -inc *歌手*.txt,*歌名*.txt,*歌曲*.txt|%{
  9.     foreach($i in [io.file]::ReadAllLines($_) -match '\d+'){
  10.         $z=$i -replace '\D*(\d+)\D*','$1'
  11.         if(!($b.ContainsKey($z))){$b.$z=$a.$z}
  12.     }
  13. }
  14. sc b.csv ($f[0],($b.Values|sort{[int]($_ -replace '^(\d+)\D*','$1')}))
复制代码
1

评分人数

    • 5i365: 很热心,很有耐心的帮忙, Ps技术,非常了得技术 + 1

TOP

本帖最后由 idwma 于 2022-1-2 19:55 编辑

回复 6# 5i365


    一直用默认的ansi,太清楚有什么不同
好像utf8也可以运行

TOP

回复 9# 5i365
排序部分还可以用went教的方法
  1. $b.Values|sort{[int]($_ -split ',')[0]}
复制代码
1

评分人数

TOP

回复 12# 5i365
  1. $a=@{}
  2. $f=[io.file]::ReadAllLines('.\a.csv')
  3. $f|%{
  4.     $z=$_ -replace '^(\d+).*','$1'
  5.     if (!($a.ContainsKey($z))){$a.$z=$_}
  6. }
  7. $b=@{}
  8. dir -recu * -inc *歌手*.txt,*歌名*.txt,*歌曲*.txt|%{
  9.     foreach($i in [io.file]::ReadAllLines($_) -match '\d+'){
  10.         $z=$i -replace '\D*(\d+)\D*','$1'
  11.         if(!($b.ContainsKey($z))){$b.$z=$a.$z}
  12.     }
  13. if($b.ContainsKey($z)){sc $_ ''}
  14. }
  15. sc b.csv ($f[0],($b.Values|sort{[int]($_ -split ',')[0]}))
复制代码

TOP

回复 14# 5i365


    文件链接过期了再发一个来看看

TOP

回复 16# 5i365
  1. #@&cls&powershell -version 2.0 "type '%~0'|out-string|iex"&pause&exit
  2. $a=@{}
  3. $f=gc a.csv
  4. $f|%{
  5.     $z=$_ -replace '^(\d+).*','$1'
  6.     if (!($a.ContainsKey($z))){$a.$z=$_}
  7. }
  8. $b=@{}
  9. $d=@{}
  10. dir -recu * -inc *原唱*.txt,*伴奏*.txt,*歌词*.txt|%{
  11.     if($_ -match '(原唱|伴奏|歌词)'){$c=$Matches[0]}
  12.     foreach($i in gc $_){
  13.         if($i -match '\d'){
  14.             $z=$i -replace '\D*(\d+)\D*','$1'
  15.             if(!($b.ContainsKey($z))){$b.$z=$a.$z;$d.$c+=@($a.$z)}
  16.         }
  17.     }
  18.     if($b.ContainsKey($z)){sc $_ ''}
  19.     $z=-1
  20. }
  21. $d.keys|%{sc $($_+'.csv') ($f[0],($d.$_|sort{[int]($_ -split ',')[0]}))}
复制代码
1

评分人数

    • 5i365: 大侠写的PS和CMD太精炼了, 得细细品, 感谢!技术 + 1

TOP

回复 18# 5i365


    开win10试了一下自带的5.1也可以的

TOP

回复 20# 5i365


    18
19

TOP

回复 22# 5i365
  1. #@&cls&powershell -version 2.0 "type '%~0'|out-string|iex"&pause&exit
  2. $r='^(\d+).+' #1
  3. #$r='\D+(\d+)\D+' #2
  4. #$r='\D+(\d+)$' #3
  5. $a=@{}
  6. $f=gc 歌单.csv -Encoding UTF8
  7. $f|%{
  8.     $z=$_ -replace '^(\d+).*','$1'
  9.     if (!($a.ContainsKey($z))){$a.$z=$_}
  10. }
  11. $b=@{}
  12. $d=@{}
  13. dir ".\任务" -recu * -inc *原唱*.txt,*伴奏*.txt,*歌词*.txt|%{
  14.     if($_ -match '(原唱|伴奏|歌词)'){$c=$Matches[0]}
  15.     foreach($i in gc $_){
  16.         if($i -match '\d'){
  17.             $z=$i -replace $r,'$1'
  18.             if(!($b.ContainsKey($z))){$b.$z=$a.$z;$d.$c+=@($a.$z)}
  19.         }
  20.     }
  21.     #if($b.ContainsKey($z)){sc $_ ''} #清空
  22.     #$z=-1 #清空
  23. }
  24. $d.keys|%{sc -Encoding UTF8 $($_+'.csv') ($f[0],($d.$_|sort{[int]($_ -split ',')[0]}))}
复制代码

TOP

本帖最后由 idwma 于 2022-1-22 00:13 编辑

回复 24# 5i365
  1. #@&cls&powershell -version 2.0 "type '%~0'|out-string|iex"&pause&exit
  2. #$r='^(\d+).*' #1
  3. $r='^\D+(\d+)\D' #2
  4. #$r='\D+(\d+)$' #3
  5. $a=@{}
  6. $f=gc 歌单.csv -Encoding UTF8
  7. $f|%{
  8.     $z=$_ -replace '^(\d+).*','$1'
  9.     if (!($a.ContainsKey($z))){$a.$z=$_}
  10. }
  11. $d=@{}
  12. dir ".\任务" -recu * -inc *原唱*.txt,*伴奏*.txt,*歌词*.txt|%{
  13.     if($_ -match '(原唱|伴奏|歌词)'){$c=$($_.fullname -replace '^.*?([^\\]*)\\[^\\]*$','$1')+'_'+$Matches[0]}
  14.     foreach($i in gc $_){
  15.         if($i -match $r){
  16.             $z=$matches[1]
  17.             if($a.ContainsKey($z)){$d[$c]+=@($a.$z)}
  18.         }
  19.     }
  20. }
  21. $d.keys|%{sc -Encoding UTF8 $($_+'.csv') ($f[0],($d.$_|sort{[int]($_ -split ',')[0]}))}
复制代码

TOP

回复 26# 5i365


    $b改成$a还是放在原来的地方

TOP

返回列表