使用PowerShell在FTP上重命名文件

5

有没有一种方法可以在FTP目录中重命名文件? 我正在将计算机上的实时图像流传输到FTP,但问题是当它上传图像到FTP时,它会立即替换文件。我想先用临时名称上传图像,然后将其重命名为live.jpg。就像缓存文件上传一样。

while($true)
{
    $i++
    $File = "c:\live\temp.jpg"
    $ftp = "ftp://username:password@example.com/camera/temp.jpg"

    $webclient = New-Object System.Net.WebClient
    $uri = New-Object System.Uri($ftp)

    $webclient.UploadFile($uri, $File)
}

我该如何正确地在脚本中使用这个?
Rename-Item ..\camera\temp.jpg live.jpg

谢谢!
2个回答

6

试试这个:

$ftp = [System.Net.FtpWebRequest]::Create("ftp://username:password@example.com/camera/temp.jpg")
$ftp.KeepAlive = $true
$ftp.UsePassive = $true
$ftp.Method = "Rename"
$ftp.RenameTo = "camera/temp1.jpg"
$ftp.UseBinary = $true
$response = [System.Net.FtpWebResponse] $ftp.GetResponse()

UsePassiveUseBinary属性对Rename方法没有影响,它们默认为$trueKeepAlive也是默认为$true。因此,这三个属性都可以被移除而不会影响代码结果。 - Martin Prikryl

1
$ftp = [System.Net.FtpWebRequest]::Create("ftp://username:password@example.com/camera/temp.jpg")
$ftp.KeepAlive = $true
$ftp.UsePassive = $true
$ftp.Method = "Rename"
$ftp.RenameTo = "camera/temp1.jpg"
$ftp.UseBinary = $true
$response = [System.Net.FtpWebResponse] $ftp.GetResponse()

我不得不调整$ftp.RenameTo这一行并删除目录才能使它对我起作用:

$ftp.RenameTo = "temp1.jpg"

无论如何感谢您


我认为这是可以预期的,因为当前目录设置为/camera。请参见此处的进一步解释... 在“备注”部分下URI可以是相对的或绝对的。如果URI的格式为“ftp://contoso.com/path”,首先.NET Framework会登录到FTP服务器,然后将当前目录设置为<UserLoginDirectory>/path。 - Chux Uzoeto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接