Windows脚本:列出与模式不匹配的文件

时间:2013-01-21 14:24:34

标签: regex windows pattern-matching

在Windows 7命令提示符中,我想列出名称不以abc开头的文件夹的所有文件。我试过了:

forfiles /P C:\myFolder\ /M ^[abc]* /S /C "CMD /C echo @file"

我的错误在哪里?

非常感谢。

3 个答案:

答案 0 :(得分:3)

查看forfiles /?

/M    searchmask    Searches files according to a searchmask.
                    The default searchmask is '*' .

强烈建议forfiles不支持正则表达式,只支持普通的Cmd / Windows通配符。

在Windows 7上,这可以在PowerShell中轻松实现:

dir c:\myFolder | ?{ -not($_.Name -match '^abc') } | select Name

(执行 in 敏感的正则表达式匹配,这与Windows文件名无关。)

NB。假设你想要文件没有开始ABC,这不是你的(尝试过的)正则表达式所说的(任何文件名都不是abc )。

答案 1 :(得分:1)

  

我的错误在哪里?

您的错误认为forfiles命令支持正则表达式。

没有。它支持与*?匹配的文件名。

答案 2 :(得分:0)

如果使用xcopy命令而不是echo,则使用选项/exclude。例如:

forfiles /P C:\myFolder\ /M ^[abc]* /S /C "CMD /C xcopy @path %myDestinationFolder% /exclude:abc*"

此外,如果您使用的是PowerShell,则另一个选项是运营商-match