使用在批处理文件中运行的 azcopy 复制文件

Posted

技术标签:

【中文标题】使用在批处理文件中运行的 azcopy 复制文件【英文标题】:Copying files using azcopy running in a batch file 【发布时间】:2021-10-10 20:37:23 【问题描述】:

我想执行一个运行azcopy 的批处理文件(通过任务计划程序),并且只将新文件复制到服务器。我已成功配置任务调度程序,但未能正确执行批处理文件。

我已经通过 SO 和兄弟网站进行了广泛的研究,但没有找到解决方案。

这是批处理文件:

azcopy cp "E:\SISTEMA\KORRENET\CSV\*.CSV" "https://x.blob.core.windows.net/data?sp=w&st=2021-07-27T23:15:58Z&se=2022-12-31T07:15:58Z&spr=https&sv=2020-08-04&sr=c&sig=my-signature-properly-escaped-with-double-ampersands%%3D" --overwrite=false

但我遇到了以下问题:

    并非目录中的所有文件都被发现。

    当我在.bat 文件中执行它时,我收到“失败”消息(最终作业状态:失败)。当我将命令直接复制并粘贴到 CMD 中时,它会“跳过”文件(仍然没有发现新文件)(最终作业状态:CompleteWithSkipped)。

    我还收到了 2 个失败的文件(当前 blob 上有一个租约,请求中没有指定租约 ID)。

这是我将命令直接复制并粘贴到 cmd 中:

我想复制目录中不存在的 .CSV 文件。

【问题讨论】:

我想有关计划任务设置的信息会帮助您... 嗨@aschipfl,目前它正在启动。我现在的问题是手动执行批处理文件 【参考方案1】:

最好使用同步将新文件仅从本地复制到天蓝色,您可以添加包含模式以过滤掉您想要同步的所需文件类型。

如果批处理文件不工作,可能是因为你的 SAS 令牌中有“%”,所以你需要在它前面添加另一个“%”才能使 .bat 文件正常工作。

另一个原因可能是,它在 SAS 令牌中没有适当的权限。我看到您只授予了 write 权限,但对于复制工作,它需要 read 和 write

同步作业命令:

azcopy sync "C:\SO threads" "https://storageaccount.blob.core.windows.net/test?sp=racwdl&st=2021-08-14T12:57:47Z&se=2021-08-14T20:57:47Z&spr=https&sv=2020-08-04&sr=c&sig=ZyL88888888888888ETq8N94I3rn1vM%%3D" --include-pattern "*.docx" --recursive=true

所以我在这里有 1 个“%”,即 %3D ,我在它前面添加了 1 个以使其工作。

注意:如果 SAS 令牌签名或权限有错误,则会导致失败,如下所示,如果您查看日志,则可以查看失败的原因。

在我的示例中,我只是将本地文件夹中的“.docx 文件”同步到容器。您可以根据需要更改它。

工作示例:

注意:请在为同步作业生成 SAS 时提供所有权限,如果您使用的是副本,请提供读写权限。

然后,您可以使用 cmd 中的以下命令进行调度:

schtasks /CREATE /SC minute /MO 5 /TN "AzCopy Script" /TR C:\script.bat

参考:Tutorial: Migrate on-premises data to Azure Storage with AzCopy | Microsoft Docs

【讨论】:

以上是关于使用在批处理文件中运行的 azcopy 复制文件的主要内容,如果未能解决你的问题,请参考以下文章

Azure Azcopy - 我可以只复制没有文件的文件夹吗?

如何在 Windows 任务调度程序上安排 azcopy?

使用 azcopy 进行并行复制

如何限制AzCopy从azure表存储中复制的实体数量?

用于连接到虚拟机并运行 azcopy 的 Azure 逻辑应用

AzCopy 的 Azure AD 登录名需要多长时间才能过期?