[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 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

回复 5# idwma


    大侠, 我想在提取某个txt中的数字后, 把该txt里面的内容清空, 可以实现吗?
注意要点:
1.如果一个txt中没有数字, 那不能清空里面的内容, 因为没有提取里面的数字
2.如果一个txt中虽然有数字, 但是不在csv的第一列当中, 那也不能清空里面的内容

TOP

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

评分人数

TOP

用批处理也行:
  1. @echo off
  2. chcp 65001>nul
  3. setlocal enabledelayedexpansion
  4. pushd "任务"
  5. for /f "delims=" %%i in ('dir /b /s /a-d *伴奏*.txt *歌词*.txt *原唱*.txt') do (
  6.     for /f "delims=" %%j in (%%i) do (
  7.         set n=%%j
  8.         set /a n=n
  9.         set m=000!n!
  10.         set _!m:~-4!=!n!
  11.     )
  12. )
  13. popd
  14. for /f "tokens=2 delims==" %%a in ('set _') do set k=!k!%%a,
  15. findstr /b /r "!k!" 0-1001.csv>b.csv
  16. pause
复制代码
1

评分人数

    • idwma: set /a还能这么用学到了呀技术 + 1

TOP

回复 5# idwma


出了点问题, 这也是我为什么不太爱使用正则的原因, 要考虑很多情况,
下面是示例文件
https://wss1.cn/f/7an8a3ux7fk 复制链接到浏览器打开
会提示下面的错误,导出的csv也没有按顺序排列
----------------------------------------------------------
sort : Cannot convert value "13297、周思涵,感谢你曾来过" to type "System.Int32". Error: "Input string was not in a corr
ect format."
At line:15 char:30
+ ... v ($f[0],($b.Values|sort{[int]($_ -replace '^(\d+)\D*','$1')})) -Enco ...
+                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidResult: (132,国语,Ayo97、周思涵,感谢你曾来过SObject) [Sort-Object], RuntimeExcep
tion
    + FullyQualifiedErrorId : ExpressionEvaluation,Microsoft.PowerShell.Commands.SortObjectCommand

请按任意键继续. . .

TOP

回复 7# idwma


    好像powershell用utf8可以, 但有时也不行, 我是用的 notepad2 编辑文本的

TOP

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

回复 6# 5i365


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

TOP

回复 5# idwma


    再请教一下, 4楼的批处理,需要保存成什么编码格式? asci 还是 utf8

我对这两个编码一直不理解, 一个不行我就转另一个, 没有头绪,

如何用第一行的代码也就下面这行自动把ps转码? 这样不管我存成什么编码都可以执行了
#@&cls&powershell "type '%~0'|out-string|iex"&pause&exit

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

本帖最后由 5i365 于 2022-1-2 19:05 编辑

回复 3# idwma


  感谢帮助, 加了.\ 然后试了一下, 回显乱码, 没生成C.csv

#@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
$a=@{}
type .\a.csv|%{
    $z=$_ -replace '^(\d+).*','$1'
    if (!($a.ContainsKey($z))){$a.$z=$_}
}
$b=@{}
dir -recu .\b\* -inc *歌手*.txt,*歌名*.txt|%{
    foreach($i in (type $_) -match '\d+'){
        $z=$i -replace '\D*(\d+)\D*','$1'
        if(!($b.ContainsKey($z))){$b.$z=$a.$z}
    }
}
$b.Values|sort{"{0:d5}" -f [int]($_ -replace '^(\d+)\D*','$1')}

测试文件
https://wss1.cn/f/79ly70c7tnk 复制链接到浏览器打开

TOP

本帖最后由 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

本帖最后由 5i365 于 2022-1-2 12:05 编辑

看到一篇文章, 说是用select-string 这个命令可以不打开文件就能搜索文本,

但是上面又涉及到了读写csv,还有排序, 搜索文件夹, 搜索文件名等,知识点有点多, 吃不消, 搞不出来, 期待路过高手帮忙一下

TOP

返回列表