标题: [文本处理] [已解决]求助批处理读取TXT文件内容重命名文件 [打印本页]
作者: silea 时间: 2020-6-8 16:30 标题: [已解决]求助批处理读取TXT文件内容重命名文件
本帖最后由 silea 于 2020-6-10 09:01 编辑
公司最近需要整理一些电话数据文件。请大神帮帮忙吧,这几天搞的头都大了
事情是这样的,给顾客拨打电话,接通后后台保存数据格式是电话号码+年月日时分秒
但是问题来了,电话接通后有可能在通话过程中就写入了通话纪要,或者是挂断电话后写入通话纪要,就是不管是通话中还是通话后哪怕是挂电话和写入纪要同步进行录音和纪要都有几分钟的不同步
比如纪要时间是188XXXXXXXX20200608162020,而录音时间是188XXXXXXXX20200608162222,纪要时间是16时20分20秒,录音是16时22分22秒
公司现在提供了一份以纪要时间为标准的文件,要求匹配录音文件。就是如果纪要时间是16时20分20秒录音是16时22分22秒就要手动修改录音时间和纪要一致
我想表达的是读取纪要文件匹配电话号码+年月日时,忽略分和秒,就是读取纪要的188XXXXXXXX20200608162020匹配录音188XXXXXXXX2020060816一致就修改录音文件和纪要一直,如果同小时内出现多条匹配值从第二条开始后缀已01开始递增
望大神帮帮忙,让小弟早日脱离苦海,小弟一定感激不尽!
作者: netdzb 时间: 2020-6-8 16:58
回复 1# silea
时间误差几秒有啥关系,都是什么领导啊?
作者: flashercs 时间: 2020-6-8 17:12
如果纪要时间是16时59分57秒,录音是17时01分22秒,这怎么?
作者: netdzb 时间: 2020-6-8 17:19
回复 3# flashercs
时间问题真的难弄,因为有千年虫的问题。
作者: silea 时间: 2020-6-8 18:07
回复 3# flashercs
在直接点 时也不要了
作者: Batcher 时间: 2020-6-8 18:25
回复 1# silea
纪要文件的扩展名是什么?
录音文件的扩展名是什么?
纪要文件和录音文件是在同一个目录下吗?
作者: flashercs 时间: 2020-6-8 21:02
纪要时间.txt格式:- 1315300183620200608143825
- 1395300183620200608183559
- 1885300183620200609071154
- 1865300183620200607235937
- 1865300183620200609112900
- 1585300183620200609213544
- 1315300183620200608113825
- 1865300183620200607025937
-
- 1865300183620200607082005
- 1315300183620200608143325
- 1585300183620200609110533
复制代码
录音文件扩展名是.wav
纪要文件与录音文件同目录下
保存代码为.bat,放到纪要文件同目录下运行.请先测试- <#*,:&cls
- @echo off
- pushd "%~dp0"
- powershell -NoProfile -ExecutionPolicy RemoteSigned -Command ". ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~0\" -ReadCount 0 | Out-String ))) "
- popd
- pause
- exit /b
- #>
- # 更改通话录音文件名,使之与纪要时间保持一致.
- $RecordTimeFile = "纪要时间.txt"
- $RecordWavs = "*.wav"
- function ParseDateTime {
- param (
- [Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)]
- [ValidateLength(14, 14)]
- [string]$strdtm
- )
- New-Object System.DateTime -ArgumentList @(
- [int]$strdtm.SubString(0, 4),
- [int]$strdtm.SubString(4, 2),
- [int]$strdtm.SubString(6, 2),
- [int]$strdtm.SubString(8, 2),
- [int]$strdtm.SubString(10, 2),
- [int]$strdtm.SubString(12, 2),
- [System.DateTimeKind]::Local)
- }
- $gHashWavs = Get-ChildItem $RecordWavs -OutBuffer 100 | Select-Object -Property @{
- Name = "FileInfo"
- Expression = { $_ }
- }, @{
- Name = "PhoneNumber"
- Expression = { $_.BaseName.SubString(0, 11) }
- }, @{
- Name = "RecordTime"
- Expression = { ParseDateTime $_.BaseName.SubString(11, 14) }
- } -OutBuffer 100 | Group-Object -Property 'PhoneNumber' -AsHashTable -AsString
-
- # $gHashWavs
-
- Get-Content -Path $RecordTimeFile -OutBuffer 100 | ForEach-Object {
- try {
- $PhoneNumber = $_.SubString(0, 11)
- $dtm = ParseDateTime $_.SubString(11, 14)
- if ($gHashWavs.ContainsKey($PhoneNumber)) {
- if ($gHashWavs[$PhoneNumber].Count -eq 0) {
- Write-Host "找不到匹配纪要时间 $_ 的录音文件." -foregroundcolor Red
- } else {
- $minTicks = [System.Int64]::MaxValue
- foreach ($item in $gHashWavs[$PhoneNumber]) {
- $ticks = [math]::Abs(($item.RecordTime - $dtm).Ticks)
- if ($ticks -lt $minTicks) {
- $wav2Rename = $item
- $minTicks = $ticks
- }
- }
- Rename-Item -Path $wav2Rename.FileInfo.PSPath -NewName ($_ + $wav2Rename.FileInfo.Extension) -Verbose
- [void]$gHashWavs[$PhoneNumber].Remove($wav2Rename)
- }
- } else {
- Write-Host -Message "不存在手机号 ${PhoneNumber} 的录音文件." -foregroundcolor Red
- }
- } catch {
-
- }
- }
-
- # $gHashWavs
复制代码
作者: ivor 时间: 2020-6-8 22:43
本帖最后由 ivor 于 2020-6-8 22:46 编辑
功能:
监听“纪要”文件夹和“录音”文件夹,如果纪要有文件创建则记录到队列变量queue,等待“录音”文件夹创建文件后, 延迟3秒(防止别的进程占用文件),更改文件名为刚刚纪要创建的文件名。使用了队列功能。
例如纪要连续创建N个文件,录音文件夹却没有创建,然后录音文件名为 纪要文件创建的命名顺序。
前提条件:确保纪要文件创建和录音文件创建顺序是一样的。
链接: https://pan.baidu.com/s/1F0hLvmpQMS6_ykKyiQqChQ 提取码: qun8
运行环境:win7 或者 .net 3.5以上
作者: silea 时间: 2020-6-9 10:16
本帖最后由 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
作者: silea 时间: 2020-6-9 10:19
回复 8# ivor
你好!大神。纪要文件是TXT 数据是存储在TXT里面的,不是一条纪要一个TXT。是多个数据在TXT里面的
是打开纪要时间.TXT
内容如下:
1315300183620200608143825
1395300183620200608183559
1885300183620200609071154
.
.
.
1865300183620200607025937
1865300183620200607082005
1315300183620200608143325
1585300183620200609110533
而录音文件夹里面录音是每条录音是单独的一个文件
作者: flashercs 时间: 2020-6-9 12:53
回复 9# silea - <#*,:&cls
- @echo off
- pushd "%~dp0"
- powershell -NoProfile -ExecutionPolicy RemoteSigned -Command ". ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~0\" -ReadCount 0 | Out-String ))) "
- popd
- pause
- exit /b
- #>
- # 更改通话录音文件名,使之与纪要时间保持一致.
- $RecordTimeFile = "纪要时间.txt"
- $RecordWavs = "*.vc2"
-
- $gHashWavs = Get-ChildItem $RecordWavs -Filter $RecordWavs -OutBuffer 100 | Where-Object { !$_.PSIsContainer } |`
- Group-Object -Property { $_.BaseName.Substring(0, 19) } -AsHashTable -AsString
- # $gHashWavs
- Get-Content -Path $RecordTimeFile -OutBuffer 100 | ForEach-Object {
- try {
- $PhoneNumber_Date = $_.SubString(0, 19)
- if ($gHashWavs.ContainsKey($PhoneNumber_Date)) {
- $colRecordWavs = $gHashWavs[$PhoneNumber_Date]
- Rename-Item -Path ($colRecordWavs[0].PSPath) -NewName ($_ + $colRecordWavs[0].Extension) -Verbose
- for ($i = 1; $i -lt $colRecordWavs.Count; $i++) {
- Rename-Item -Path ($colRecordWavs[$i].PSPath) -NewName ($_ + (([string]$i).PadLeft(2, '0')) + $colRecordWavs[$i].Extension) -Verbose
- }
- } else {
- Write-Host "不存在手机号 ${PhoneNumber_Date} 的录音文件." -ForegroundColor Red
- }
- } catch {
-
- }
- }
- # $gHashWavs
复制代码
作者: silea 时间: 2020-6-9 15:38
回复 silea
flashercs 发表于 2020-6-9 12:53
纪要
1880000000020200609152015
大神测试了。
1880000000020200609151515.VC2
1880000000020200609151615.VC2
1880000000020200609151715.VC2
结果
1880000000020200609151515.VC2 第一条没有重命名
188000000002020060915201501.VC2
188000000002020060915201502.VC2
2.3条正确
作者: flashercs 时间: 2020-6-9 16:03
回复 12# silea
没有重名怎么会这样?最好新建个空目录重新测试.
作者: silea 时间: 2020-6-9 16:11
回复 13# flashercs
我就是建立新的目录 单独测试的,在同一目录下TXT里1条纪要和3条与纪要相关的录音
作者: flashercs 时间: 2020-6-9 16:22
回复 14# silea
测试目录
作者: silea 时间: 2020-6-9 16:38
回复 15# flashercs
感谢大神!测试成功!
作者: Blakelee 时间: 2020-6-9 23:34
回复 11# flashercs
太厉害了,向大佬学习!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |