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

[文件操作] 批处理如何自动识别文件,然后调用相应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就生成多少个批处理。

  1. @echo off
  2. cd /d "%~dp0"
  3. for /f "delims=" %%A in ('dir /a-d /b *.wav') do (
  4.   encoder.exe "%%~nxA" "%%~nA.raw" "%%~nA.inc" "%%~nA"
  5. )
复制代码
微信:flashercs
QQ:49908356

TOP

回复 2# flashercs
感谢回答,能生成对应的.inc、.raw文件,但文件里面没有数据不对,
.inc里面只有unsigned char hint_wav_file,没有数据,
.raw里面是空的。
用原本的批处理生成数据是没问题的,烦请再帮忙看看,谢谢!

TOP

我知道原因了,是有些.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请按任意键继续. . .

TOP

转出来的.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,

TOP

  1. @echo off
  2. cd /d "%~dp0"
  3. 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 $&'))}"
  4. pause
  5. exit /b
复制代码
回复 5# oyr520
微信:flashercs
QQ:49908356

TOP

回复 6# flashercs
验证了可以,感谢大佬

TOP

还想实现如下,可以帮忙看看怎么实现嘛,谢谢!
#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,
};

TOP

回复 6# flashercs
发现只能把数组是unsigned char hint_wav_file添加上const,但每个xxx.inc里面的数组名都是根据xxx生成的,不是固定hint_wav_file,可以麻烦再帮忙修改下嘛,谢谢!

TOP

回复 9# oyr520
  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. Get-ChildItem -Path *.inc | ForEach-Object {
  10.   if (-not $_.PSIsContainer) {
  11.     $txt = [System.IO.File]::ReadAllText($_)
  12.     $basename = $_.BaseName
  13.     $txt = $txt -replace ('(?<!const\s+)unsigned\s+char\s+' + ([regex]::Escape($basename))), 'const $&'
  14.     $txt = $txt -replace ('unsigned\s+char\s+' + ([regex]::Escape($basename)) + '[^{]+\{[^}]+}(?!;)'), '$&;'
  15.     $txt += @"
  16. DSP_HINT_SOUND_P HINT_$basename =
  17. {
  18.         .HINT_DATA = $basename, //这里也根据前面数组名命名
  19.         .SIZE = sizeof($basename), //这里也根据前面数组名命名
  20.         .duck_vol = DEFAULT_DUCK_VOL,
  21.         .xef_vol = DEFAULT_XEF_VOL,
  22.         .L_to_out_ch_num = DEFAULT_L_OUT_CH,
  23.         .R_to_out_ch_num = DEFAULT_R_OUT_CH,
  24. };
  25. "@
  26.     [System.IO.File]::WriteAllText($_, $txt)
  27.   }
  28. }
复制代码
以后回复帖子,我才能看到消息.
微信:flashercs
QQ:49908356

TOP

回复 10# flashercs
好的,验证了基本可以,在最前面还要增加下面2行,麻烦再看看,谢谢!
#include "types.h"
#include "dsp_hint_sound.h"

TOP

回复 11# oyr520
  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. Get-ChildItem -Path *.inc | ForEach-Object {
  10.   if (-not $_.PSIsContainer) {
  11.     $txt = [System.IO.File]::ReadAllText($_)
  12.     $basename = $_.BaseName
  13.     $txt = $txt -replace ('(?<!const\s+)unsigned\s+char\s+' + ([regex]::Escape($basename))), 'const $&'
  14.     $txt = $txt -replace ('unsigned\s+char\s+' + ([regex]::Escape($basename)) + '[^{]+\{[^}]+}(?!;)'), '$&;'
  15.     $txt = @"
  16. #include "types.h"
  17. #include "dsp_hint_sound.h"
  18. $txt
  19. DSP_HINT_SOUND_P HINT_$basename =
  20. {
  21.         .HINT_DATA = $basename, //这里也根据前面数组名命名
  22.         .SIZE = sizeof($basename), //这里也根据前面数组名命名
  23.         .duck_vol = DEFAULT_DUCK_VOL,
  24.         .xef_vol = DEFAULT_XEF_VOL,
  25.         .L_to_out_ch_num = DEFAULT_L_OUT_CH,
  26.         .R_to_out_ch_num = DEFAULT_R_OUT_CH,
  27. };
  28. "@
  29.     [System.IO.File]::WriteAllText($_, $txt)
  30.   }
  31. }
复制代码
微信:flashercs
QQ:49908356

TOP

回复 12# flashercs
非常完美,谢谢大佬

TOP

返回列表