标题: [文件操作] 批处理如何自动识别文件,然后调用相应exe处理,谢谢解答 [打印本页]
作者: oyr520 时间: 2021-12-2 17:41 标题: 批处理如何自动识别文件,然后调用相应exe处理,谢谢解答
目前批处理内容:
encoder.exe hint_wav_file.wav hint_wav_file.raw hint_wav_file.inc hint_wav_file
-->此批处理的功能是数据转换的作用,encoder.exe 把hint_wav_file.wav转换生成hint_wav_file.raw,
然后再以hint_wav_file.raw转换为hint_wav_file.inc,hint_wav_file.inc里面会创建unsigned char hint_wav_file[]数组保存数据。
目前批处理每个wav都要增加一个批处理,然后手动更新名称xxx.wav,hint_wav_file,如果很多个wav那太耗时间做这个事了。
怎么实现自动扫描当前目录下所有wav,然后自动更新xxx.wav名称,hint_wav_file呢?能一个批处理实现数据转换吗?还是也只能有多少个wav就生成多少个批处理。
作者: flashercs 时间: 2021-12-2 21:26
- @echo off
- cd /d "%~dp0"
- for /f "delims=" %%A in ('dir /a-d /b *.wav') do (
- encoder.exe "%%~nxA" "%%~nA.raw" "%%~nA.inc" "%%~nA"
- )
复制代码
作者: oyr520 时间: 2021-12-3 09:58
回复 2# flashercs
感谢回答,能生成对应的.inc、.raw文件,但文件里面没有数据不对,
.inc里面只有unsigned char hint_wav_file,没有数据,
.raw里面是空的。
用原本的批处理生成数据是没问题的,烦请再帮忙看看,谢谢!
作者: oyr520 时间: 2021-12-3 10:18
我知道原因了,是有些.wav文件规格有问题,我加了pause看到如下提示,我重新把有问题的.wav转一下规格就可以了,谢谢!
Xeff: input wav format error!!!
Xeff: input wav channel: 1 or 2; BitsPerSample: 16bitsXeff: input wav format error!!
Xeff: input wav channel: 1 or 2; BitsPerSample: 16bitsXeff: input wav format error!!
Xeff: input wav channel: 1 or 2; BitsPerSample: 16bits请按任意键继续. . .
作者: oyr520 时间: 2021-12-3 10:21
转出来的.inc是如下这样的数组,可以再帮忙写个批处理,自动把所有.inc文件里面的都加上const吗?谢谢!
比如这样:const unsigned char hint_wav_file[27904]=
unsigned char hint_wav_file[27904]=
{0x78,0x65,0x66,0x66,0x00,0x00,0x6d,0x00,0x00,0x01,0x00,0x10,0x00,0x00,0x00,0x80,
0x00,0x00,0x06,0x80,0x00,0x00,0x07,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0xcc,0x00,
0x00,0x00,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
作者: flashercs 时间: 2021-12-3 12:53
- @echo off
- cd /d "%~dp0"
- powershell -c "dir *.inc|foreach-object{[system.io.file]::WriteAllText($_,([system.io.file]::ReadAllText($_) -replace '(?<!const\s+)unsigned\s+char\s+hint_wav_file','const $&'))}"
- pause
- exit /b
复制代码
回复 5# oyr520
作者: oyr520 时间: 2021-12-3 13:37
回复 6# flashercs
验证了可以,感谢大佬
作者: oyr520 时间: 2021-12-6 17:41
还想实现如下,可以帮忙看看怎么实现嘛,谢谢!
#include "types.h" //生成这2个头文件
#include "dsp_hint_sound.h" //生成这2个头文件
unsigned char hint_wav_file[27904]=
{0x78,0x65,0x66,0x66,0x00,0x00,0x6d,0x00,0x00,0x01,0x00,0x10,0x00,0x00,0x00,0x80,
0x00,0x00,0x06,0x80,0x00,0x00,0x07,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0xcc,0x00,
0x00,0x00,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
}; //}这里自动加上;
//最后自动加上如下,其中HINT_hint_wav_file 根据前面数组名命名HINT_xxx
DSP_HINT_SOUND_P HINT_hint_wav_file =
{
.HINT_DATA = hint_wav_file, //这里也根据前面数组名命名
.SIZE = sizeof(hint_wav_file), //这里也根据前面数组名命名
.duck_vol = DEFAULT_DUCK_VOL,
.xef_vol = DEFAULT_XEF_VOL,
.L_to_out_ch_num = DEFAULT_L_OUT_CH,
.R_to_out_ch_num = DEFAULT_R_OUT_CH,
};
作者: oyr520 时间: 2021-12-8 10:40
回复 6# flashercs
发现只能把数组是unsigned char hint_wav_file添加上const,但每个xxx.inc里面的数组名都是根据xxx生成的,不是固定hint_wav_file,可以麻烦再帮忙修改下嘛,谢谢!
作者: flashercs 时间: 2021-12-8 14:25
回复 9# oyr520 - <#*,:&cls
- @echo off
- pushd "%~dp0"
- powershell -NoProfile -ExecutionPolicy RemoteSigned -Command ". ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~0\" -ReadCount 0 | Out-String ))) "
- popd
- pause
- exit /b
- #>
- Get-ChildItem -Path *.inc | ForEach-Object {
- if (-not $_.PSIsContainer) {
- $txt = [System.IO.File]::ReadAllText($_)
- $basename = $_.BaseName
- $txt = $txt -replace ('(?<!const\s+)unsigned\s+char\s+' + ([regex]::Escape($basename))), 'const $&'
- $txt = $txt -replace ('unsigned\s+char\s+' + ([regex]::Escape($basename)) + '[^{]+\{[^}]+}(?!;)'), '$&;'
- $txt += @"
-
- DSP_HINT_SOUND_P HINT_$basename =
- {
- .HINT_DATA = $basename, //这里也根据前面数组名命名
-
- .SIZE = sizeof($basename), //这里也根据前面数组名命名
-
- .duck_vol = DEFAULT_DUCK_VOL,
-
- .xef_vol = DEFAULT_XEF_VOL,
-
- .L_to_out_ch_num = DEFAULT_L_OUT_CH,
-
- .R_to_out_ch_num = DEFAULT_R_OUT_CH,
- };
-
- "@
- [System.IO.File]::WriteAllText($_, $txt)
- }
- }
复制代码
以后回复帖子,我才能看到消息.
作者: oyr520 时间: 2021-12-8 15:16
回复 10# flashercs
好的,验证了基本可以,在最前面还要增加下面2行,麻烦再看看,谢谢!
#include "types.h"
#include "dsp_hint_sound.h"
作者: flashercs 时间: 2021-12-8 15:26
回复 11# oyr520 - <#*,:&cls
- @echo off
- pushd "%~dp0"
- powershell -NoProfile -ExecutionPolicy RemoteSigned -Command ". ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~0\" -ReadCount 0 | Out-String ))) "
- popd
- pause
- exit /b
- #>
- Get-ChildItem -Path *.inc | ForEach-Object {
- if (-not $_.PSIsContainer) {
- $txt = [System.IO.File]::ReadAllText($_)
- $basename = $_.BaseName
- $txt = $txt -replace ('(?<!const\s+)unsigned\s+char\s+' + ([regex]::Escape($basename))), 'const $&'
- $txt = $txt -replace ('unsigned\s+char\s+' + ([regex]::Escape($basename)) + '[^{]+\{[^}]+}(?!;)'), '$&;'
- $txt = @"
- #include "types.h"
- #include "dsp_hint_sound.h"
-
- $txt
-
- DSP_HINT_SOUND_P HINT_$basename =
- {
- .HINT_DATA = $basename, //这里也根据前面数组名命名
-
- .SIZE = sizeof($basename), //这里也根据前面数组名命名
-
- .duck_vol = DEFAULT_DUCK_VOL,
-
- .xef_vol = DEFAULT_XEF_VOL,
-
- .L_to_out_ch_num = DEFAULT_L_OUT_CH,
-
- .R_to_out_ch_num = DEFAULT_R_OUT_CH,
- };
-
- "@
- [System.IO.File]::WriteAllText($_, $txt)
- }
- }
复制代码
作者: oyr520 时间: 2021-12-8 16:10
回复 12# flashercs
非常完美,谢谢大佬
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |