Batch file 如何批量使用FORFILES的Searchmask?

Batch file 如何批量使用FORFILES的Searchmask?,batch-file,Batch File,因此,我尝试使用forfiles/mdx*/p..\fsb/C“cmd/C cd..\extracted&&fsb2wav@path”从.fsb文件中提取.wav文件。 但我只需要提取格式为DX*.fsb的文件,而不提取DX_FR.fsb或DX_DE.fsb,其中*any可以是任意数量的字母数字字符。 有办法吗?我一直在摆弄/M选项,但它似乎不喜欢正则表达式。通配符*表示文件/路径名中任意数量的有效字符(?表示单个有效字符),因此您需要自己进行筛选 对于您手头的任务,我不会在这里使用forfil

因此,我尝试使用
forfiles/mdx*/p..\fsb/C“cmd/C cd..\extracted&&fsb2wav@path”
从.fsb文件中提取.wav文件。
但我只需要提取格式为DX*.fsb的文件,而不提取DX_FR.fsb或DX_DE.fsb,其中*any可以是任意数量的字母数字字符。

有办法吗?我一直在摆弄/M选项,但它似乎不喜欢正则表达式。

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

对于您手头的任务,我不会在这里使用
forfiles
,因为它在每次迭代中引用一个新的
cmd
实例时速度非常慢,而且应用额外的过滤器更加复杂。我将采用的方法是一个
for/F
循环,该循环解析输送到
findstr
dir/B
命令的输出:

@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem在此定义常量:
设置“WORKDIR=…\extracted”
设置“SEEKDIR=…\fsb”
设置“DIRFILT=DX*.fsb”
设置“REGEXPR=^DX[0-9A-Z]*.fsb$”
pushd“%SEEKDIR%”和(
对于/F“eol=| delims=”%%F in('
目录/B“%DIRFILT%”^
findstr/I/R“%REGEXPR%”
""做"(
pushd“%WORKDIR%”和(
回声fsb2wav“%%~fF”
邻苯二胺
)
)
邻苯二胺
)
端部
退出/B

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

当我将脚本放入.bat文件并运行它时,它不会执行任何操作。这是我第一次乱搞批处理,我做错什么了吗?不要双击批处理文件,而是从命令提示符窗口运行它;您将看到它输出
fsb2wav
命令行,而不是出于测试目的执行它们;注意我回答的最后一句话;请注意,批处理脚本必须位于正确的位置,因为您使用的是相对路径(我刚刚从您的问题中复制了它们);就我所知,在同一个位置必须有三个目录:
fsb
(包含源文件),
提取的
(存储转换的文件)和另一个放置脚本的目录……好的,我开始理解你所做的,只是REGEXPR被弄乱了。DIRFILT的作用是什么?
DIRFILT
不是强制性的,但如果目录中有许多文件,它会减少传递给
findstr
的项目数,因此可能会略微提高性能……是的,目录中大约有75000个文件,它可能很有用。无论我如何尝试将输出放在不同的目录中,我都做不到,所以现在我只是尝试在move命令中通过管道将fsb2wav的输出发送到另一个目录,这是一个好的解决方案吗?另外,如何确保管道将其输出发送到源目录参数而不是目标目录参数?