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

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

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

我的错误在哪里?

非常感谢。

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 

(这在执行敏感正则表达式匹配的情况下,在Windows文件名的情况下无关紧要。)

NB。 假设你想要不启动ABC文件,这不是你的(企图)正则表达式所说的(任何不是abc文件名)。

我的错误在哪里?

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

它不是。 它支持与*?匹配的文件名 。

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

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

另外,如果你使用的是PowerShell,另一个选项是operator -match