2010-07-24 140 views
5

我无法找到有关如何在批处理文件中使用文件掩码的详细信息。我的要求,批处理文件:文件掩码

forfiles -p "C:\what\ever" -s -m *.log -c "cmd /c somecommmand" 

,而不是选择所有的日志文件(* .LOG),如何选择所有具有在最后一个整数后缀的日志文件。例如,在下面的文件,

test.log, test1.log, test2.log, test3.log.. 

我需要一个文件掩码选择所有除test.log

我试过test*.log,但slects test.log中也是如此。最好不要包含文件名称部分(测试)。例如,*<0-9d>.log

谢谢。

回答

0

尝试test?.log

+0

无法正常工作 - 您可以在shell中试用它:'echo> test.log; echo> test1.log; dir test?.log'会找到2个文件。 – schnaader 2010-07-24 17:17:04

1

由于test?.log甚至test??.log发现test.log也是如此,唯一得到你想要的是某种类型的解决办法,比如什么:

if exist test.log ren test.log test.tmp 
REM Do your stuff here, you can now use test*.log 
if exist text.tmp ren test.tmp test.log 

我不'不知道这种意外的行为? (并不意味着只有一个字符,但最多只有一个字符)是Windows特有的,或者从DOS开始就是这样的,但它可能非常烦人。

+0

谢谢..我可以这样工作,也确认了批处理脚本中没有正则表达式。 – bsr 2010-07-24 23:54:03

1

你可以尝试以下方法,我个人认为是可怕的,但它可能只是你需要什么:

FOR %i IN (1 2 3 4 5 6 7 8 9 10 11 12 13 ...) DO IF EXIST test%i.log (somecommand) 

如果后缀是真是任何整数在可能范围很广,这将不起作用—,除非您嵌套多个FOR循环,其中每个只处理一位数字,并且您将IF EXIST test%i.log更改为IF EXIST test%a%b%c%d.log(对于四位数字)。

此外,没有必要在单独的shell(CMD /C)中执行somecommand,除非当然这实际上是您需要执行的操作。

+0

感谢.. +1的想法。 – bsr 2010-07-24 23:54:21

+1

'for/l'呢? – Joey 2010-07-28 07:36:26

+0

* @ JohannesRössel:*那位仁慈的先生,实际上会比我建议的更聪明。 ;-)(我今天学到了新东西......) – stakx 2010-07-28 18:41:08

1

要对正则表达式匹配文件名中的一个批处理文件,你可以使用循环作为模板如下:

for /F "delims=" %%I in ('"dir /B /S | findstr /E "\\test[0-9][0-9]*\.log""') do (
    echo %%I 
) 

这只是简单地打印在当前目录及其子目录中的所有文件的完整路径目录名称与test1.log,test2.log,test3.log ...

dir命令从当前目录生成目录树的列表。每行包含完整路径。该列表通过findstr命令传递,该命令匹配给定正则表达式的完整路径。对于每次迭代,变量%%I都包含与正则表达式匹配的文件的完整路径。

+0

我会试试这个..谢谢.. – bsr 2010-07-25 12:34:42