Windows scripting: list files not matching a pattern

前端 未结 3 1706
一生所求
一生所求 2021-01-15 13:31

In Windows 7 command prompt, I´d like to list all files of a folder which name does not start with abc. I have tried:

forfiles /P C:\\myFolder\\         


        
相关标签:
3条回答
  • 2021-01-15 14:07

    An alternative, in case of using a xcopy command instead of echo is using the option /exclude. For instance:

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

    Also, if you´re using PowerShell, another option is the operator -match.

    0 讨论(0)
  • 2021-01-15 14:14

    Looking at forfiles /?:

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

    which strongly suggests forfiles doesn't support regular expressions, just normal Cmd/Windows wildcards.

    On Windows 7 this can easily be achieved in PowerShell:

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

    (That performs a case-insensitive regular expression match, which doesn't matter in the case of Windows filenames.)

    NB. Assuming you want files not starting ABC, which isn't what your (attempted) regular expression says (any filename starting something that isn't a, b or c).

    0 讨论(0)
  • 2021-01-15 14:27

    Where is my error?

    Your error is thinking that the forfiles command would support regular expressions.

    It does not. It supports file name matching with * and ?.

    0 讨论(0)
提交回复
热议问题