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

使用Move-Item无法移动特殊命名文件的问题求助

解决PowerShell移动含特殊字符文件失败但返回成功的问题

问题原因

文件名里的[]属于PowerShell的通配符元字符,直接用-Path参数时,PowerShell会把这些字符当作通配符解析,导致实际找不到目标文件。同时默认情况下Move-Item遇到不存在的路径只会抛出非终止错误,try/catch块不会捕获这类错误,所以脚本会输出"Successfully moved"但文件根本没被移动。

修复后的脚本

Get-ChildItem "C:\NVR\CameraDrop\dump" -Filter *.dav | ForEach-Object {
    # 处理逻辑在这里

    try { 
        Move-Item -LiteralPath $_.FullName -Destination "C:\NVR\CameraDrop\dump\archive\$($_.Name)" -Force -ErrorAction Stop
        "Successfully moved $($_.Name)"
    }
    catch { 
        "Error moving $($_.Name): $_"
    }
}

关键修改说明

  • -LiteralPath替代-Path:这个参数会将传入的路径当作纯字面量处理,不会解析任何通配符,完美适配带[]、@等特殊字符的文件名。
  • -ErrorAction Stop:强制将Move-Item的非终止错误转为终止错误,让catch块能正确捕获异常,方便定位具体哪个文件出问题以及错误原因。
  • 优化输出信息:在成功/错误提示里加入文件名,便于直观确认每个文件的处理状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:48:22