如何使用batch和findstr获取特定文件?

时间:2017-02-06 11:52:48

标签: 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].*.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] - 与当前文件匹配。

非常感谢!

1 个答案:

答案 0 :(得分:0)

当您迭代使用dir检索到的文件列表并按findstr过滤它时,您只需要删除这些数字。使用带有数字作为分隔符的其他for /f将它们与初始字符分开

@echo off
    setlocal enableextensions disabledelayedexpansion

    for /f "delims=" %%f in ('
        dir /b *.arj
        ^| findstr /r "^k ^c ^ev_"
    ') do for /f "delims=0123456789" %%a in ("%%~f") do (
        echo call :myFunction "%%~a" "%%~f" 
    )

这将简单地回显到控制台的函数调用操作。在实现该功能时删除echo命令。