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

使用AzCopy C#复制Blob容器报错:未知命令问题求助

问题:AzCopy执行时提示“unknown command”错误,复制Blob容器失败

我在使用AzCopy将Blob容器从一个存储账户复制到另一个时遇到了问题,启动进程时出现以下错误:

Error: unknown command "/Source:https://pslfilestore.blob.core.windows.net/downloads" for "azcopy"
Run 'azcopy --help' for usage.
System.IO.StreamWriterdownloads unknown command "/Source:https://pslfilestore.blob.core.windows.net/downloads" for "azcopy "

我的代码如下:

foreach (CloudBlobContainer items in containers) { 
    var AzCopyProcess = new Process(); 
    AzCopyProcess.StartInfo.UseShellExecute = false; 
    AzCopyProcess.StartInfo.RedirectStandardOutput = true; 
    AzCopyProcess.StartInfo.FileName = strCommand; 
    //pass storage account name, container and the key 
    AzCopyProcess.StartInfo.Arguments = $"/Source:https://{storageAccountName}.blob.core.windows.net/{items.Name} /Dest:{dayBlob.Uri}/{storageAccountName}/{items.Name} /SourceKey:{accountKey.ToString()} /DestKey:{pslFileStoreBackUpKey.ToString()} /S"; 
    AzCopyProcess.Start(); 
    StreamWriter stdOut = new StreamWriter(Console.OpenStandardOutput()); 
    stdOut.AutoFlush = true; 
    Console.Write(stdOut); 
    var output = AzCopyProcess.StandardOutput.ReadToEnd(); 
    Console.WriteLine($"{items.Name} {output}"); 
}

请问该问题的原因是什么?


原因分析与解决方案

这个错误的核心原因是你使用了旧版AzCopy的参数格式,但当前运行的是新版AzCopy(v10+),两者的语法完全不兼容:

  • 旧版AzCopy(v8及更早)采用/参数名:值的参数式语法,比如/Source:... /Dest:...
  • 新版AzCopy(v10+)采用命令式语法,必须先指定操作命令(比如copy),然后用--参数名 值的格式传递参数

你的代码里用了/Source:...这种旧格式,新版AzCopy会把开头的/Source:...当成一个未知命令,所以抛出了"unknown command"的错误。

修正后的代码

把Arguments部分改成新版AzCopy的语法即可,具体调整如下:

foreach (CloudBlobContainer items in containers) { 
    var AzCopyProcess = new Process(); 
    AzCopyProcess.StartInfo.UseShellExecute = false; 
    AzCopyProcess.StartInfo.RedirectStandardOutput = true; 
    // 确保strCommand是"azcopy"(新版可执行文件名,旧版是AzCopy.exe)
    AzCopyProcess.StartInfo.FileName = strCommand; 
    // 改用新版AzCopy的copy命令语法
    AzCopyProcess.StartInfo.Arguments = $"copy \"https://{storageAccountName}.blob.core.windows.net/{items.Name}\" \"{dayBlob.Uri}/{storageAccountName}/{items.Name}\" --source-key \"{accountKey}\" --destination-key \"{pslFileStoreBackUpKey}\" --recursive"; 
    AzCopyProcess.Start(); 
    var output = AzCopyProcess.StandardOutput.ReadToEnd(); 
    Console.WriteLine($"{items.Name} {output}"); 
}

关键调整点说明

  1. 添加copy命令:这是新版AzCopy执行复制操作的必需前缀,告诉AzCopy你要执行的是复制任务
  2. 参数格式替换:
    • /Source: → 直接作为第一个位置参数(源路径)
    • /Dest: → 直接作为第二个位置参数(目标路径)
    • /SourceKey: → --source-key
    • /DestKey: → --destination-key
    • /S → --recursive(递归复制子目录/Blob)
  3. 路径包裹双引号:避免路径中出现特殊字符时导致参数解析错误
  4. 确认AzCopy版本:确保strCommand指向的是新版AzCopy(可执行文件名为azcopy,旧版是AzCopy.exe)

如果需要验证语法,你可以先在命令行手动执行类似的命令,确认能正常运行后再放到代码里:

azcopy copy "https://pslfilestore.blob.core.windows.net/downloads" "目标路径" --source-key "源账户密钥" --destination-key "目标账户密钥" --recursive

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:07:22