如何用PowerShell和正则表达式移动所有偶数命名文件至指定目录?
解决方法
你的问题出在正则没考虑文件名的.txt后缀:
- 你测试的正则
^[0-9]*[02468]$是匹配纯数字字符串,但实际文件名是数字.txt(比如342.txt),所以完全匹配不上。 - 之前的命令
^[0-9]+[02468]没加结尾锚定$,所以只要文件名开头的数字部分以偶数结尾就能匹配,但因为没限制后缀,理论上三位数也能生效,可能是你测试时的特殊情况导致它只对两位数起作用。
方案1:修正正则匹配完整文件名
调整正则,包含.txt后缀(注意点号要转义成\.,否则会匹配任意字符):
Get-ChildItem | Where-Object {$_.Name -match '^\d*[02468]\.txt$'} | Move-Item -Destination .\foo
^\d*[02468]\.txt$:匹配以任意数量数字开头、最后一位数字是偶数、结尾为.txt的文件名\d是[0-9]的简写,写法更简洁
方案2:提取数字部分判断奇偶(更可靠)
避开正则的局限,直接提取文件名的纯数字部分,转成整数后判断是否为偶数:
Get-ChildItem | Where-Object { # 先确保文件名(不含后缀)是纯数字 $_.BaseName -match '^\d+$' -and # 判断数字是否为偶数 [int]$_.BaseName % 2 -eq 0 } | Move-Item -Destination .\foo
这种方法更灵活,哪怕以后文件名后缀变化(比如.md),或者数字长度改变,都能正常工作。
内容的提问来源于stack exchange,提问作者bloomer_xx
相关产品推荐
相关产品推荐

