标题: [文件操作] 批处理怎么匹配数组提取数据更新到文件呢?人工复制数组数据很繁琐,还容易出错 [打印本页]
作者: oyr520 时间: 2022-6-16 21:11 标题: 批处理怎么匹配数组提取数据更新到文件呢?人工复制数组数据很繁琐,还容易出错
比如:
把move-l_format.c里面m_reg_tab数组数据更新到amp.h 中m_reg_tab_l数组;
把move-r_format.c里面m_reg_tab数组数据更新到amp.h 中m_reg_tab_r数组;
把move-c_format.c里面m_reg_tab数组数据更新到amp.h 中m_reg_tab_cen数组;
把move-l_format.c里面m_ram1_tab数组数据更新到amp.h中 eq_tables_ram1_left_movie数组;
把move-r_format.c里面m_ram1_tab数组数据更新到amp.h中 eq_tables_ram1_right_movie数组;
把move-c_format.c里面m_ram1_tab数组数据更新到amp.h中 eq_tables_ram1_cen_movie数组;
把music-l_format.c里面m_ram1_tab数组数据更新到amp.h中 eq_tables_ram1_left_music数组;
把music-r_format.c里面m_ram1_tab数组数据更新到amp.h中 eq_tables_ram1_right_music数组;
把music-c_format.c里面m_ram1_tab数组数据更新到amp.h中 eq_tables_ram1_cen_music数组;
把news-l_format.c里面m_ram1_tab数组数据更新到amp.h中 eq_tables_ram1_left_news数组;
把news-r_format.c里面m_ram1_tab数组数据更新到amp.h中 eq_tables_ram1_right_news数组;
把news-c_format.c里面m_ram1_tab数组数据更新到amp.h中 eq_tables_ram1_cen_news数组;
还有.c文件跟amp.h文件不一定在同一个目录,谢谢解答!
以下是文件下载链接
https://we.tl/t-UTm9Q26blY
作者: went 时间: 2022-6-17 09:10
test.bat
ansi编码,和amp_.h放到一起运行- #&cls&@cd /d "%~dp0"&powershell -c "Get-Content '%~0' | Out-String | Invoke-Expression" & pause&exit
- cls
- #映射关系表
- $map = @(
- 'amp_.h',
-
- 'move-l_format.c -> m_reg_tab -> m_reg_tab_l',
- 'move-r_format.c -> m_reg_tab -> m_reg_tab_r',
- 'move-c_format.c -> m_reg_tab -> m_reg_tab_cen',
-
- 'move-l_format.c -> m_ram1_tab -> eq_tables_ram1_left_movie',
- 'move-r_format.c -> m_ram1_tab -> eq_tables_ram1_right_movie',
- 'move-c_format.c -> m_ram1_tab -> eq_tables_ram1_cen_movie',
-
- 'music-l_format.c -> m_ram1_tab -> eq_tables_ram1_left_music',
- 'music-r_format.c -> m_ram1_tab -> eq_tables_ram1_right_music',
- 'music-c_format.c -> m_ram1_tab -> eq_tables_ram1_cen_music',
-
- 'news-l_format.c -> m_ram1_tab -> eq_tables_ram1_left_news',
- 'news-r_format.c -> m_ram1_tab -> eq_tables_ram1_right_news',
- 'news-c_format.c -> m_ram1_tab -> eq_tables_ram1_cen_news'
- )
- #读取源
- $src_str = Get-Content $map[0] | Out-String
- #循环读取新数据
- $map | Select-Object -Skip 1 | foreach {
- $arr = $_ -split '->' | foreach { $_.Trim() }
- Write-Host ('文件 {0} 中 {1} 数组数据更新到文件 {2} 中 {3} 数组' -f $arr[0],$arr[1],$map[0],$arr[2])
- $str = Get-ChildItem $arr[0] -Recurse | Select-Object -First 1 | Get-Content | Out-String
- if($str -match ('(?s){0}\[\]\s*=\s*{{\s*\n(.*?)}};' -f $arr[1])){
- $s1 = $Matches[1]
- $src_str = $src_str -replace ('(?s)(?<={0}\[\]\s*=\s*{{\s*\n)(.*?)(?=}};)' -f $arr[2]),$s1
- }
- }
- #输出新数据
- $src_str | Out-File $map[0] -Encoding Default
- Write-Host '更新已完成'
复制代码
作者: oyr520 时间: 2022-6-17 12:26
回复 2# went
感谢大佬,验证正确。
发现一个现象,多次运行批处理后.h文件最后都会增加一行空行。
还有对比参数是否更新正确,有点不好对比,还希望帮忙再改下,谢谢!
文件连接https://we.tl/t-OsyP8Sgl6J
把move-l_format.c里面m_reg_tab数组数据更新到amp_move.h 中m_reg_tab_move_l数组;
把move-r_format.c里面m_reg_tab数组数据更新到amp_move.h 中m_reg_tab_move_r数组;
把move-c_format.c里面m_reg_tab数组数据更新到amp_move.h 中m_reg_tab_move_cen数组;
把music-l_format.c里面m_reg_tab数组数据更新到amp_music.h 中m_reg_tab_music_l数组;
把music-r_format.c里面m_reg_tab数组数据更新到amp_music.h 中m_reg_tab_music_r数组;
把music-c_format.c里面m_reg_tab数组数据更新到amp_music.h 中m_reg_tab_music_cen数组;
把news-l_format.c里面m_reg_tab数组数据更新到amp_news.h 中m_reg_tab_news_l数组;
把news-r_format.c里面m_reg_tab数组数据更新到amp_news.h 中m_reg_tab_news_r数组;
把news-c_format.c里面m_reg_tab数组数据更新到amp_news.h 中m_reg_tab_news_cen数组;
把move-l_format.c里面m_ram1_tab数组数据更新到amp_move.h中 eq_tables_ram1_left_move数组;
把move-r_format.c里面m_ram1_tab数组数据更新到amp_move.h中 eq_tables_ram1_right_move数组;
把move-c_format.c里面m_ram1_tab数组数据更新到amp_move.h中 eq_tables_ram1_cen_move数组;
把music-l_format.c里面m_ram1_tab数组数据更新到amp_music.h中 eq_tables_ram1_left_music数组;
把music-r_format.c里面m_ram1_tab数组数据更新到amp_music.h中 eq_tables_ram1_right_music数组;
把music-c_format.c里面m_ram1_tab数组数据更新到amp_music.h中 eq_tables_ram1_cen_music数组;
把news-l_format.c里面m_ram1_tab数组数据更新到amp_news.h中 eq_tables_ram1_left_news数组;
把news-r_format.c里面m_ram1_tab数组数据更新到amp_news.h中 eq_tables_ram1_right_news数组;
把news-c_format.c里面m_ram1_tab数组数据更新到amp_news.h中 eq_tables_ram1_cen_news数组;
作者: flashercs 时间: 2022-6-17 15:33
- <#*,:&cls
- @echo off
- cd /d "%~dp0"
- powershell -C "Set-Location -LiteralPath ([Environment]::CurrentDirectory);. ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~f0\" -ReadCount 0 | Out-String)))"
- pause
- exit /b
- #>
- $mapTable = @(
- @("move-l_format.c", "m_reg_tab", "amp_move.h", "m_reg_tab_move_l"),
- @("move-r_format.c", "m_reg_tab", "amp_move.h", "m_reg_tab_move_r"),
- @("move-c_format.c", "m_reg_tab", "amp_move.h", "m_reg_tab_move_cen"),
-
- @("music-l_format.c", "m_reg_tab", "amp_music.h", "m_reg_tab_music_l"),
- @("music-r_format.c", "m_reg_tab", "amp_music.h", "m_reg_tab_music_r"),
- @("music-c_format.c", "m_reg_tab", "amp_music.h", "m_reg_tab_music_cen"),
-
- @("news-l_format.c", "m_reg_tab", "amp_news.h", "m_reg_tab_news_l"),
- @("news-r_format.c", "m_reg_tab", "amp_news.h", "m_reg_tab_news_r"),
- @("news-c_format.c", "m_reg_tab", "amp_news.h", "m_reg_tab_news_cen"),
-
- @("move-l_format.c", "m_ram1_tab", "amp_move.h", "eq_tables_ram1_left_move"),
- @("move-r_format.c", "m_ram1_tab", "amp_move.h", "eq_tables_ram1_right_move"),
- @("move-c_format.c", "m_ram1_tab", "amp_move.h", "eq_tables_ram1_cen_move"),
-
- @("music-l_format.c", "m_ram1_tab", "amp_music.h", "eq_tables_ram1_left_music"),
- @("music-r_format.c", "m_ram1_tab", "amp_music.h", "eq_tables_ram1_right_music"),
- @("music-c_format.c", "m_ram1_tab", "amp_music.h", "eq_tables_ram1_cen_music"),
-
- @("news-l_format.c", "m_ram1_tab", "amp_news.h", "eq_tables_ram1_left_news"),
- @("news-r_format.c", "m_ram1_tab", "amp_news.h", "eq_tables_ram1_right_news"),
- @("news-c_format.c", "m_ram1_tab", "amp_news.h", "eq_tables_ram1_cen_news")
-
- )
- $format = '(?si)(?<var>{0}\[\]\s*=\s*)(?<block>(?>/\*.*?\*/|//[^\n]*|(?<open>\{{)|(?<-open>\}})|.)+?(?(open)(?!)))'
- $encoding = New-Object System.Text.UTF8Encoding -ArgumentList $false
- $files = Get-ChildItem -Recurse | Where-Object { -not $_.PSIsContainer }
- foreach ($arr in $mapTable) {
- $srcfile = $files | Where-Object { $_.Name -eq $arr[0] } | Select-Object -First 1
- $dstfile = $files | Where-Object { $_.Name -eq $arr[2] } | Select-Object -First 1
- if ($null -ne $srcfile -and $null -ne $dstfile) {
- $resrc = [regex]($format -f $arr[1])
- $redst = [regex]($format -f $arr[3])
- $txtsrc = [System.IO.File]::ReadAllText($srcfile.FullName, $encoding)
- $txtdst = [System.IO.File]::ReadAllText($dstfile.FullName, $encoding)
- [System.IO.File]::WriteAllText($dstfile.FullName, $redst.Replace($txtdst, {
- param([System.Text.RegularExpressions.Match]$mdst)
- $msrc = $resrc.Match($txtsrc)
- if ($msrc.Success) {
- $mdst.Groups['var'].Value + $msrc.Groups['block'].Value
- } else {
- $mdst.Value
- }
- }), $encoding)
- }
- }
复制代码
作者: oyr520 时间: 2022-6-17 21:07
回复 4# flashercs
验证了可以,谢谢大佬
批处理代码量真的好少,如果用C语言实现估计非常麻烦
作者: oyr520 时间: 2022-11-20 22:58
回复 5# oyr520
您好,后面m_ram1_tab参数格式有点改变,从{0x00,0xc00f50},// ##Channel_1_EQ1_A1 改变为 {0x00, 0x0c, 0x05, 0x04, 0x85},//##Channel_1_EQ1_A1
会提取不正确,可以帮忙改修改下嘛,谢谢^_^!
作者: oyr520 时间: 2022-11-21 13:49
回复 4# flashercs
您好,后面m_ram1_tab参数格式有点改变,从{0x00,0xc00f50},// ##Channel_1_EQ1_A1 改变为 {0x00, 0x0c, 0x05, 0x04, 0x85},//##Channel_1_EQ1_A1
会提取不正确,可以帮改忙修改下嘛,谢谢^_^!
作者: oyr520 时间: 2022-12-6 09:33
回复 flashercs
您好,后面m_ram1_tab参数格式有点改变,从{0x00,0xc00f50},// ##Channel_1_EQ1_A1 改 ...
oyr520 发表于 2022-11-21 13:49
可以发红包 ,有空时帮忙再看看,谢谢!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |