Batch file 如何使用批处理和findstr获取特定文件?

Batch file 如何使用批处理和findstr获取特定文件?,batch-file,Batch File,我想从目录中获取特定文件: > dir /B *.arj bc170117.arj be170117.arj co170117.arj curd0114.arj curd0115.arj curd0116.arj ev_k0113.arj kgrd0113.arj kgrm1612.arj metd0113.arj rv503432.arj test.arj 如果我使用 >dir /b *.arj | findstr /r "^k[a-z].*.arj$ ^c[a-z].*.ar

我想从目录中获取特定文件:

> dir /B *.arj

bc170117.arj
be170117.arj
co170117.arj
curd0114.arj
curd0115.arj
curd0116.arj
ev_k0113.arj
kgrd0113.arj
kgrm1612.arj
metd0113.arj
rv503432.arj
test.arj
如果我使用

>dir /b *.arj | findstr /r "^k[a-z].*.arj$ ^c[a-z].*.arj$ ^ev_[a-z].*.arj$"
co170117.arj
curd0114.arj
curd0115.arj
curd0116.arj
ev_k0113.arj
kgrd0113.arj
kgrm1612.arj
没关系。 但是如何匹配以下文件[a-z][0-9].arj并调用具有匹配结果的函数[a-z]?例如,输出:

bc170117.arj bc
be170117.arj be
co170117.arj co
curd0114.arj curd
curd0115.arj curd
curd0116.arj curd
ev_k0113.arj ev_k
kgrd0113.arj kgrd
kgrm1612.arj kgrm
metd0113.arj metd
rv503432.arj rv
调用函数需要对每个匹配的文件执行smth。 这是一个不起作用的代码

FOR /F "tokens=*" %a IN ('dir /b *.arj | findstr /r "^[a-z][0-9].arj$"') DO ( call:myfunction [a-z] [a-z][0-9].arj )
[a-z]-从当前文件中进行匹配


非常感谢

当您迭代使用
dir
检索的文件列表并通过
findstr
对其进行过滤时,您只需删除这些数字。使用另一个带有数字作为分隔符的
for/f
,将其与初始字符分开

@echo关闭
setlocal enableextensions disabledelayedexpansion
对于/f“delims=”%%f in('
目录/b*.arj
^|findstr/r“^k^c^ev”
“)为/f“delims=0123456789”%%a在(“%%~f”)中的执行(
回显调用:myFunction“%%~a”“%%~f”
)

这将只是回显以控制台函数调用操作。执行函数时,请删除
echo
命令。

call
无法处理REGEX。您可能希望使用类似于调用:myfunction%a的
之类的方法。此外,您还必须将
中的管道符号转义为
^ |
安装确认窗口,然后单击“安装确认”。谢谢你的解决方案对我有帮助。我修改了一点代码:
for/f“delims=“%%f in('dir/b*.arj^ findstr/r[0-9]”)do for/f“delims=0123456789”%%a in(“%%f”)do(调用:myfunc%%~a%%~f)