You need to enable JavaScript to run this app. 使用PowerShell通过Rename-FTPItem移动FTP文件报(550)文件不可用错误咨询
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell通过Rename-FTPItem移动FTP文件报(550)文件不可用错误咨询

550错误核心原因
  • 第一类必现错误:路径拼接缺失目录分隔符
    你定义的$ServerPath、$archivefolder两个目录变量末尾没有加/分隔符,直接拼接文件名后会生成无效路径:
    比如原文件真实路径是ftp://myftpserver.com/Test/20240520_sales.csv,但你拼出来的原文件路径是ftp://myftpserver.com/Test20240520_sales.csv,完全匹配不到服务器上的真实文件,因此FTP返回550文件不存在错误。
  • 第二类参数逻辑不匹配:PSFTP的Rename-FTPItem不支持传入带域名前缀的完整FTP URL作为目标路径
    该cmdlet本质是封装了FTP原生的重命名指令(FTP本身没有独立的移动命令,跨目录移动等价于将文件重命名到目标目录路径),传入的路径参数仅支持使用相对于FTP会话根目录的相对路径,如果你重复拼接域名前缀,会被模块识别为服务器上的嵌套路径,同样触发550错误。
修正后可直接运行的代码
$FtpServer = "ftp://myftpserver.com"
$User = "myusername"
$PWD = "mypassword"
$Password = ConvertTo-SecureString $PWD -AsPlainText -Force

$FtpCredentials = New-Object System.Management.Automation.PSCredential ($User, $Password)

Set-FTPConnection -Credentials $FtpCredentials -Server $FtpServer -Session MyFtpSession -UsePassive 
$FtpSession = Get-FTPConnection -Session MyFtpSession

# 定义目录路径时补充末尾的/分隔符,使用相对根目录的路径格式
$ServerPath = "/Test"
$archivefolder = "/Tested"
# 匹配所有csv格式的待处理文件
$fileList = Get-FTPChildItem -Session $FtpSession -Path $ServerPath -Filter *.csv

foreach ($element in $fileList) {
  # 直接使用文件对象自带的FullName属性获取原文件路径,避免手动拼接出错
  $sourcePath = $element.FullName
  # 拼接目标文件路径,目录末尾保留/分隔符
  $targetPath = $archivefolder + $element.Name
  # 传入相对路径执行重命名(即跨目录移动操作)
  Rename-FTPItem -Path $sourcePath -NewName $targetPath -Session $FtpSession
}
关于通配符批量移动的说明

Rename-FTPItem本身不支持直接传入通配符执行批量操作,但通过上述代码的逻辑,可以先通过Get-FTPChildItem的-Filter参数匹配所有带时间戳的csv文件,再循环执行移动操作,完全可以满足你的归档需求。如果调整代码后仍然出现550错误,需要检查当前FTP用户对Test、Tested目录是否同时拥有读取、写入、修改权限。

内容的提问来源于stack exchange,提问作者SQ-what

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 13:45:02