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

[文本处理] [已解决]求助批处理读取TXT文件内容重命名文件

本帖最后由 silea 于 2020-6-10 09:01 编辑

公司最近需要整理一些电话数据文件。请大神帮帮忙吧,这几天搞的头都大了
事情是这样的,给顾客拨打电话,接通后后台保存数据格式是电话号码+年月日时分秒
但是问题来了,电话接通后有可能在通话过程中就写入了通话纪要,或者是挂断电话后写入通话纪要,就是不管是通话中还是通话后哪怕是挂电话和写入纪要同步进行录音和纪要都有几分钟的不同步
比如纪要时间是188XXXXXXXX20200608162020,而录音时间是188XXXXXXXX20200608162222,纪要时间是16时20分20秒,录音是16时22分22秒
公司现在提供了一份以纪要时间为标准的文件,要求匹配录音文件。就是如果纪要时间是16时20分20秒录音是16时22分22秒就要手动修改录音时间和纪要一致
我想表达的是读取纪要文件匹配电话号码+年月日时,忽略分和秒,就是读取纪要的188XXXXXXXX20200608162020匹配录音188XXXXXXXX2020060816一致就修改录音文件和纪要一直,如果同小时内出现多条匹配值从第二条开始后缀已01开始递增
望大神帮帮忙,让小弟早日脱离苦海,小弟一定感激不尽!

回复 11# flashercs


    太厉害了,向大佬学习!

TOP

回复 15# flashercs


    感谢大神!测试成功!

TOP

回复 14# silea


测试目录
微信:flashercs
QQ:49908356

TOP

回复 13# flashercs


    我就是建立新的目录 单独测试的,在同一目录下TXT里1条纪要和3条与纪要相关的录音

TOP

回复 12# silea


    没有重名怎么会这样?最好新建个空目录重新测试.
微信:flashercs
QQ:49908356

TOP

回复  silea
flashercs 发表于 2020-6-9 12:53


纪要
1880000000020200609152015
    大神测试了。
1880000000020200609151515.VC2
1880000000020200609151615.VC2
1880000000020200609151715.VC2

结果
1880000000020200609151515.VC2    第一条没有重命名
188000000002020060915201501.VC2
188000000002020060915201502.VC2
2.3条正确

TOP

回复 9# silea
  1. <#*,:&cls
  2. @echo off
  3. pushd "%~dp0"
  4. powershell -NoProfile -ExecutionPolicy RemoteSigned -Command ". ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~0\" -ReadCount 0 | Out-String ))) "
  5. popd
  6. pause
  7. exit /b
  8. #>
  9. # 更改通话录音文件名,使之与纪要时间保持一致.
  10. $RecordTimeFile = "纪要时间.txt"
  11. $RecordWavs = "*.vc2"
  12. $gHashWavs = Get-ChildItem $RecordWavs -Filter $RecordWavs -OutBuffer 100 | Where-Object { !$_.PSIsContainer } |`
  13.   Group-Object -Property { $_.BaseName.Substring(0, 19) } -AsHashTable -AsString
  14. # $gHashWavs
  15. Get-Content -Path $RecordTimeFile -OutBuffer 100 | ForEach-Object {
  16.   try {
  17.     $PhoneNumber_Date = $_.SubString(0, 19)
  18.     if ($gHashWavs.ContainsKey($PhoneNumber_Date)) {
  19.       $colRecordWavs = $gHashWavs[$PhoneNumber_Date]
  20.       Rename-Item -Path ($colRecordWavs[0].PSPath) -NewName ($_ + $colRecordWavs[0].Extension) -Verbose
  21.       for ($i = 1; $i -lt $colRecordWavs.Count; $i++) {
  22.         Rename-Item -Path ($colRecordWavs[$i].PSPath) -NewName ($_ + (([string]$i).PadLeft(2, '0')) + $colRecordWavs[$i].Extension) -Verbose
  23.       }
  24.     } else {
  25.       Write-Host "不存在手机号 ${PhoneNumber_Date} 的录音文件." -ForegroundColor Red
  26.     }
  27.   } catch {
  28.    
  29.   }
  30. }
  31. # $gHashWavs
复制代码
1

评分人数

微信:flashercs
QQ:49908356

TOP

回复 8# ivor


    你好!大神。纪要文件是TXT 数据是存储在TXT里面的,不是一条纪要一个TXT。是多个数据在TXT里面的
是打开纪要时间.TXT
内容如下:
1315300183620200608143825
1395300183620200608183559
1885300183620200609071154
.
.
.
1865300183620200607025937
1865300183620200607082005
1315300183620200608143325
1585300183620200609110533
而录音文件夹里面录音是每条录音是单独的一个文件

TOP

本帖最后由 silea 于 2020-6-9 10:28 编辑

回复 7# flashercs


    大神你好!我测试可以匹配,扩展名我也修改了一下是*.VC2
但是有这样一个问题
如TXT里面有一条这样的1888888888820200609181818,录音文件里有3条这样的
1888888888820200609191818.VC2
1888888888820200609201818.VC2
1888888888820200609211818.VC2
批处理只处理第三条,他完全忽视前面的两条,刚刚又测试一下。你好是从后往前匹配的,所以如果第一条分有误差他就匹配分了,我在修改时他就忽略1.2条 直接修改3条了
可以改成这样吗,当遇见多条数据相同的(只号码+年月日匹配忽略时分秒)多出来的后缀01递增吗?
1888888888820200609181818.VC2
188888888882020060918181801.VC2
188888888882020060918181802.VC2

TOP

本帖最后由 ivor 于 2020-6-8 22:46 编辑



功能:
监听“纪要”文件夹和“录音”文件夹,如果纪要有文件创建则记录到队列变量queue,等待“录音”文件夹创建文件后, 延迟3秒(防止别的进程占用文件),更改文件名为刚刚纪要创建的文件名。使用了队列功能。
例如纪要连续创建N个文件,录音文件夹却没有创建,然后录音文件名为 纪要文件创建的命名顺序。

前提条件:确保纪要文件创建和录音文件创建顺序是一样的。
链接: https://pan.baidu.com/s/1F0hLvmpQMS6_ykKyiQqChQ 提取码: qun8

运行环境:win7 或者 .net 3.5以上
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

纪要时间.txt格式:
  1. 1315300183620200608143825
  2. 1395300183620200608183559
  3. 1885300183620200609071154
  4. 1865300183620200607235937
  5. 1865300183620200609112900
  6. 1585300183620200609213544
  7. 1315300183620200608113825
  8. 1865300183620200607025937
  9. 1865300183620200607082005
  10. 1315300183620200608143325
  11. 1585300183620200609110533
复制代码
录音文件扩展名是.wav
纪要文件与录音文件同目录下
保存代码为.bat,放到纪要文件同目录下运行.请先测试
  1. <#*,:&cls
  2. @echo off
  3. pushd "%~dp0"
  4. powershell -NoProfile -ExecutionPolicy RemoteSigned -Command ". ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~0\" -ReadCount 0 | Out-String ))) "
  5. popd
  6. pause
  7. exit /b
  8. #>
  9. # 更改通话录音文件名,使之与纪要时间保持一致.
  10. $RecordTimeFile = "纪要时间.txt"
  11. $RecordWavs = "*.wav"
  12. function ParseDateTime {
  13.   param (
  14.     [Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)]
  15.     [ValidateLength(14, 14)]
  16.     [string]$strdtm
  17.   )
  18.   New-Object System.DateTime -ArgumentList @(
  19.     [int]$strdtm.SubString(0, 4),
  20.     [int]$strdtm.SubString(4, 2),
  21.     [int]$strdtm.SubString(6, 2),
  22.     [int]$strdtm.SubString(8, 2),
  23.     [int]$strdtm.SubString(10, 2),
  24.     [int]$strdtm.SubString(12, 2),
  25.     [System.DateTimeKind]::Local)
  26. }
  27. $gHashWavs = Get-ChildItem $RecordWavs -OutBuffer 100 | Select-Object -Property @{
  28.   Name       = "FileInfo"
  29.   Expression = { $_ }
  30. }, @{
  31.   Name       = "PhoneNumber"
  32.   Expression = { $_.BaseName.SubString(0, 11) }
  33. }, @{
  34.   Name       = "RecordTime"
  35.   Expression = { ParseDateTime $_.BaseName.SubString(11, 14) }
  36. } -OutBuffer 100 | Group-Object -Property 'PhoneNumber' -AsHashTable -AsString
  37. # $gHashWavs
  38. Get-Content -Path $RecordTimeFile -OutBuffer 100 | ForEach-Object {
  39.   try {
  40.     $PhoneNumber = $_.SubString(0, 11)
  41.     $dtm = ParseDateTime $_.SubString(11, 14)
  42.     if ($gHashWavs.ContainsKey($PhoneNumber)) {
  43.       if ($gHashWavs[$PhoneNumber].Count -eq 0) {
  44.         Write-Host "找不到匹配纪要时间 $_ 的录音文件." -foregroundcolor Red
  45.       } else {
  46.         $minTicks = [System.Int64]::MaxValue
  47.         foreach ($item in $gHashWavs[$PhoneNumber]) {
  48.           $ticks = [math]::Abs(($item.RecordTime - $dtm).Ticks)
  49.           if ($ticks -lt $minTicks) {
  50.             $wav2Rename = $item
  51.             $minTicks = $ticks
  52.           }
  53.         }
  54.         Rename-Item -Path $wav2Rename.FileInfo.PSPath -NewName ($_ + $wav2Rename.FileInfo.Extension) -Verbose
  55.         [void]$gHashWavs[$PhoneNumber].Remove($wav2Rename)
  56.       }
  57.     } else {
  58.       Write-Host -Message "不存在手机号 ${PhoneNumber} 的录音文件." -foregroundcolor Red
  59.     }
  60.   } catch {
  61.    
  62.   }
  63. }
  64. # $gHashWavs
复制代码
微信:flashercs
QQ:49908356

TOP

回复 1# silea


纪要文件的扩展名是什么?
录音文件的扩展名是什么?
纪要文件和录音文件是在同一个目录下吗?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 3# flashercs


    在直接点 时也不要了

TOP

回复 3# flashercs

时间问题真的难弄,因为有千年虫的问题。

TOP

返回列表