我有一个PowerShell脚本,它将获取文件夹中所有文件的列表,然后(根据Switch
语句中的正则表达式匹配)将每个文件移动到指定的文件夹(取决于正则表达式匹配)
我遇到了特定列表的问题。一组以" 40"开头的文件(以其部件编号命名的PDF文件);移动到指定的文件夹。
正则表达式本身对我来说很容易,我遇到的问题是,如果文件包含_ol
或_ol_
,则它不能匹配。
例如,下面的文件名应全部匹配:
401234567.pdf
401234567a.pdf
401234567_a.pdf
401234567a_something.pdf
以下内容不应匹配:
401234567_ol.pdf
401234567_ol_something.pdf
使用^(?i)40\w+[^_ol].pdf$
正则表达式是我能得到的最接近的。
它将否定401234567_ol.pdf
作为匹配;但是,它接受401234567_ol_something.pdf
。有谁知道我怎么能否认这也是一场比赛?
答案 0 :(得分:3)
答案 1 :(得分:2)
答案 2 :(得分:0)
只需使用符合您要排除的模式的-notmatch
operator:
Get-ChildItem 'C:\source' -Filter '*.pdf' |
? { $_.BaseName -notmatch '_ol(_|$)' } |
Move-Item -Destination 'C:\destination'
或-notlike
运算符(为了获得更好的性能):
Get-ChildItem 'C:\source' -Filter '*.pdf' |
? { $_.BaseName -notlike '*_ol' -and $_.BaseName -notlike '*_ol_*' } |
Move-Item -Destination 'C:\destination'