PowerShell下载Azure Blob指定文件如何避免保留原目录结构
问题原因
Get-AzureStorageBlobContent 命令默认会保留Blob在容器内的虚拟目录层级,自动在本地创建对应的目录结构,所以才会生成嵌套的子目录。另外你当前脚本的-prefix参数存在错误:你已经指定了容器名为A,容器内的文件路径是B/C.csv,所以前缀应该填B/而非A/B,否则会匹配不到目标文件。
解决方法
遍历匹配到的Blob文件,手动指定目标文件的完整本地路径,直接取Blob的文件名拼接到本地根目录即可,无需使用命令自带的路径生成逻辑。
修正后的脚本如下:
$AccountName = "X" $ContainerName = "A" $Key = "dcg" $Context = New-AzureStorageContext -StorageAccountName $AccountName -StorageAccountKey $Key # 前缀修正为容器内的路径B/,不需要加容器名A $Files = Get-AzureStorageBlob -Container $ContainerName -Context $Context -Prefix "B/" | Where-Object {($_.ContentType -eq "application/octet-stream")} $DestinationPath = "D:\localfolder" # 遍历每个blob手动指定下载路径,仅保留文件名 foreach ($file in $Files) { $fileName = $file.Name.Split('/')[-1] $fullDestPath = Join-Path -Path $DestinationPath -ChildPath $fileName $file | Get-AzureStorageBlobContent -Destination $fullDestPath -Context $Context -Force }
- 代码里通过
$file.Name.Split('/')[-1]截取Blob路径的最后一段作为本地文件名,避免保留前面的虚拟目录层级 - 加上
-Force参数可覆盖本地已存在的同名文件,不需要的话可以删除
内容的提问来源于stack exchange,提问作者Arya
相关产品推荐
相关产品推荐

