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

Copying files using azcopy running in a batch file

我想执行一个运行 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

但我遇到了以下问题:

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

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

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

这里是我直接复制粘贴命令到cmd的时候:

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

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

批处理文件不工作,可能是因为你的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 token签名或权限有误,会导致失败,如下所示,如果你去日志,你会看到失败的原因.

在我的示例中,我只是将本地文件夹中的“.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