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

如何用PowerShell调用Azcopy上传文件到Azure Blob成功后删除本地文件

解决方案

你当前脚本的核心问题是仅做了批量上传操作,没有捕获单个文件的上传结果,也没有对应触发删除逻辑,所以每次循环都会重复上传所有本地存在的iso文件。可以通过逐文件校验上传状态的逻辑实现需求,无需依赖Azcopy的sync功能,也不会受Blob端文件被移走的影响。

完整可用脚本

# 先定义本地上传目录和Blob SAS地址
$Upload = "你的本地上传目录路径"
$blobSasUrl = "你的Azure Blob容器SAS URL"

while($true){
    # 遍历本地所有iso文件
    $localIsoFiles = Get-ChildItem -Path $Upload -Filter "*.iso" -File
    foreach ($file in $localIsoFiles) {
        # 单个文件执行Azcopy上传,overwrite=false避免重复上传同名未被移走的Blob
        .\azcopy copy $file.FullName $blobSasUrl --log-level ERROR --overwrite=false
        # 校验Azcopy执行结果,退出码为0代表上传成功
        if ($LASTEXITCODE -eq 0) {
            # 上传成功后删除本地源文件
            Remove-Item $file.FullName -Force
            Write-Host "文件 $($file.Name) 上传成功,已删除本地文件"
        } else {
            Write-Host "文件 $($file.Name) 上传失败,下次循环重试"
        }
    }
    Start-Sleep -Seconds 60 -Verbose
}

参数说明

  • --overwrite=false:如果对应Blob还未被移走,不会重复覆盖上传相同文件名的文件,节省带宽
  • $LASTEXITCODE:Azcopy执行后的系统退出码,0代表操作完全成功,非0代表出现错误
  • 逐文件处理的逻辑完全不依赖Blob端的文件存在状态,符合你Blob作为暂存区、文件会被后续移走的使用场景

注意事项

  • 提前确保Azcopy程序存放在脚本执行目录,或已加入系统环境变量可直接调用
  • 使用的SAS URL需要拥有对应Blob容器的写入权限
  • 若存在超大体积的iso文件,可根据实际需求调整循环间隔,或添加Azcopy可选参数适配业务场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:57:05