使用在批处理文件中运行的 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 - 我可以只复制没有文件的文件夹吗?