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

PowerShell移动.eml文件报错:文件不存在问题求助

问题描述

我生成了一个包含.eml文件路径列表的文本文件,想要把这些文件移动到其他位置,但因为生成方式的问题,列表里有重复项。我写了一段PowerShell脚本,变量显示正常,但执行时总是提示文件不存在,脚本和错误信息如下:

脚本代码

$filepath = 'G:\APPS\temp\Eric\Chris2.txt'

$new = 'G:\APPS\temp\Eric\Rel-emails'

$old = 'C:\a\b'

$OldName = (GC -path $filepath -Raw) | Get-Unique
ForEach ($item in $OldName)  {
       $NewName = $OldName -replace [regex]::Escape("$old"),$new
       Move-item -Path $Item -Destination $NewName -WhatIf
}

错误信息

' does not exist.
At line:10 char:8
+        Move-item -Path $Item -Destination "$NewName" -WhatIf
+        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Move-Item], PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.MoveItemCommand
问题分析与修复方案
  • 核心问题1:Get-Content -Raw导致遍历逻辑错误
    使用-Raw参数会把整个文本文件读取成单个字符串,Get-Unique处理后依然是一个长字符串。此时用ForEach ($item in $OldName)会把字符串拆成单个字符逐个遍历,$Item变成单个字符,自然找不到对应文件。

  • 核心问题2:替换操作未针对当前循环项
    脚本中用$OldName -replace ...生成目标路径,而非当前循环的$Item,这会导致目标路径变成整个文本内容替换后的结果,完全不符合预期。

  • 修复后的脚本

$filepath = 'G:\APPS\temp\Eric\Chris2.txt'
$newDir = 'G:\APPS\temp\Eric\Rel-emails'
$oldBasePath = 'C:\a\b'

# 按行读取文件、去重后遍历每个路径
Get-Content -Path $filepath | Get-Unique | ForEach-Object {
    # 针对当前路径生成目标路径
    $targetPath = $_ -replace [regex]::Escape($oldBasePath), $newDir
    # 确保目标目录存在,不存在则创建
    $targetDir = Split-Path -Path $targetPath -Parent
    if (-not (Test-Path -Path $targetDir)) {
        New-Item -Path $targetDir -ItemType Directory -Force | Out-Null
    }
    Move-Item -Path $_ -Destination $targetPath -WhatIf
}
  • 关键修复点说明
    1. 移除-Raw参数,让Get-Content按行读取,Get-Unique可正确对每行路径去重。
    2. 使用ForEach-Object遍历每行路径,$_代表当前处理的文件路径。
    3. 替换操作针对当前路径$_生成正确的目标路径。
    4. 添加目标目录检查与创建逻辑,避免因目录不存在报错。
    5. 优化变量名,提升代码可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:52:38