You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell按文件名末尾奇数移动文件代码失效问题求解

脚本失效原因

两段代码分别存在以下语法和逻辑错误:

  • 第一段代码错误点:
    • -match是正则匹配运算符,不支持通配符*的类文件系统匹配规则,也不支持直接传入多个匹配模式组成的数组,你写的'*1.txt'这类模式不符合正则语法,匹配逻辑完全失效。
  • 第二段代码错误点:
    • $files直接赋值为源路径字符串,没有调用Get-ChildItem获取路径下的文件列表,循环遍历的对象只是一个路径文本,根本不是文件对象。
    • 调用Move-Item时没有传入-Path参数指定要移动的源文件,参数缺失无法执行。
    • -like运算符同样不支持直接传入多个通配模式组成的数组作为匹配条件,写法本身存在语法错误。
正确实现方案

不需要逐一列举1、3、5、7、9的后缀匹配项,利用PowerShell通配符或正则的字符集匹配能力即可实现需求,同时补充必要的路径校验、预校验逻辑避免误操作:

$srcpath = "C:\Folder\SubFolder3"
$dstpath = "C:\Folder\SubFolder2"
# 校验目标文件夹是否存在,不存在则自动创建
if (-not (Test-Path -Path $dstpath -PathType Container)) {
    New-Item -ItemType Directory -Path $dstpath | Out-Null
}
Get-ChildItem -File -Recurse -Path $srcpath | ForEach-Object {
    # 匹配所有格式文件:取不带扩展名的文件名最后一位,判断是否为奇数字符
    if ($_.BaseName[-1] -match '[13579]') {
        Move-Item -Path $_.FullName -Destination $dstpath -WhatIf
    }

    # 如果仅需要匹配txt格式文件,把上面的if判断替换为下面这行即可
    # if ($_.Name -like '*[13579].txt') {
    #     Move-Item -Path $_.FullName -Destination $dstpath -WhatIf
    # }
}

初次运行请保留-WhatIf参数,执行后控制台会输出所有待移动的文件预览,确认匹配结果完全符合预期后,再删除-WhatIf参数执行正式移动操作,避免误操作丢失文件。

内容的提问来源于stack exchange,提问作者gfran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 19:46:00