ARM模板中拼接共享路径与文件名列表报错求助
解决ARM模板中共享路径与文件名列表的拼接问题
我来帮你搞定这个路径拼接的问题!你当前的写法有几个语法和引用上的小错误,我一步步给你拆解修正:
先揪出你写法里的核心问题
你的代码concat[parameters('SharedPath'), @items['Folder Name')]存在三个关键错误:
- 函数语法错误:ARM模板里的函数调用必须用圆括号
(),而不是方括号[],所以concat[]要改成concat() - 循环项引用错误:在copy循环中引用当前项时,必须用
items('你的循环名称')格式,而且引号/括号要匹配——你写的@items['Folder Name')里括号不配对,应该是items('循环名')['Folder Name'](另外ARM表达式里不需要加@前缀,直接写函数即可) - 反斜杠转义问题:因为ARM模板是JSON格式,反斜杠是转义字符,所以路径里的每个实际反斜杠都需要写成
\\,否则会被JSON解析器当成转义符处理
正确的拼接写法示例
假设你的ARM模板参数和循环定义如下,我给你完整的可运行示例:
1. 先定义参数(注意共享路径的转义)
"parameters": { "SharedPath": { "type": "string", "defaultValue": "\\\\HostName\\MySharedPath\\Root" // 实际路径是\HostName\MySharedPath\Root,JSON里要转义成\\\\和\\ }, "FolderList": { "type": "array", "defaultValue": [ { "Folder Name": "ProjectA" }, { "Folder Name": "ProjectB" } ] } }
2. 在copy循环中完成路径拼接
"resources": [], // 这里可以替换成你实际要部署的资源 "variables": { "copy": [ { "name": "FullFolderPaths", "count": "[length(parameters('FolderList'))]", "input": "[concat(parameters('SharedPath'), '\\', items('FullFolderPaths')['Folder Name'])]" } ] }
额外优化:处理共享路径末尾的反斜杠
如果你的SharedPath参数可能末尾带反斜杠(比如用户输入\\\\HostName\\MySharedPath\\Root\\),拼接后会出现\\ProjectA的冗余格式,我们可以加个处理去掉末尾的反斜杠:
"input": "[concat(replace(parameters('SharedPath'), '\\\\$', ''), '\\', items('FullFolderPaths')['Folder Name'])]"
这里replace(parameters('SharedPath'), '\\\\$', '')会匹配并移除路径末尾的反斜杠,确保拼接后的路径格式统一。
验证结果
上面的代码运行后,variables('FullFolderPaths')会生成一个符合预期的路径数组:
[ "\\HostName\\MySharedPath\\Root\\ProjectA", "\\HostName\\MySharedPath\\Root\\ProjectB" ]
内容的提问来源于stack exchange,提问作者Santosh Ramamurthy
相关产品推荐
相关产品推荐

