如何批量使用Searchmask for FORFILES?

时间:2016-03-23 11:52:36

标签: batch-file

所以我尝试使用forfiles /M DX* /P ..\fsb /C "cmd /c cd ..\extracted && fsb2wav @path"从.fsb文件中提取.wav文件 但是我只需要提取格式为DX * .fsb且没有DX _FR.fsb或DX _DE.fsb的文件,其中*任意数量的字母数字字符。
有没有办法做到这一点?我一直在使用/ M选项,但它似乎不喜欢正则表达式。

1 个答案:

答案 0 :(得分:1)

通配符*代表文件/路径名中有效的任意数量的字符(?代表单个有效字符),因此您需要自己进行过滤。

对于你手头的任务,我不会在这里使用forfiles,因为它很慢,因为它为每次迭代实例都是一个新的cmd实例,并且应用额外的过滤器会更复杂。我想要的方法是for /F循环,用于解析用dir /B管道传输的findstr命令的输出:

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem Define constants here:
set "WORKDIR=..\extracted"
set "SEEKDIR=..\fsb"
set "DIRFILT=DX*.fsb"
set "REGEXPR=^DX[0-9A-Z]*.fsb$"

pushd "%SEEKDIR%" && (
    for /F "eol=| delims=" %%F in ('
        dir /B "%DIRFILT%" ^| ^
            findstr /I /R "%REGEXPR%"
    ') do (
        pushd "%WORKDIR%" && (
            ECHO fsb2wav "%%~fF"
            popd
        )
    )
    popd
)

endlocal
exit /B

测试完脚本后,删除大写ECHO以实际执行fsb2wav工具。