如何在ADF中生成文件系统接收器的正确反斜杠根路径?
解决Windows文件系统接收器路径转义反斜杠问题
问题原因
Lookup活动和变量输出里显示的双反斜杠(\\)是JSON格式的转义表示,实际字符串值是单个反斜杠。比如输出里的"\\msf.dom"对应的真实值是\msf.dom,"\shared\Workspace\1 - abc"对应的真实值是\shared\Workspace\1 - abc。你之前用replace函数没生效,是因为没正确处理表达式语言中的转义规则。
解决方案
方案1:直接拼接字段(推荐)
既然实际值已经是单个反斜杠,直接拼接两个字段就能得到目标路径:
@concat(item().begin_dir, item().sub_dir)
虽然在变量或Lookup的JSON输出里,结果会显示为\\msf.dom\shared\Workspace\1 - abc,但这只是JSON的转义显示,实际传给Windows文件系统接收器的路径是正确的\msf.dom\shared\Workspace\1 - abc,可以直接使用。
方案2:强制处理多余转义反斜杠(适用于字段存在重复转义的情况)
如果字段里确实存了多余的转义反斜杠(比如实际是两个反斜杠),需要在表达式里用四个反斜杠匹配实际的两个反斜杠,替换为单个反斜杠:
@concat(replace(item().begin_dir, '\\\\', '\\'), replace(item().sub_dir, '\\\\', '\\'))
逻辑说明:在ADF表达式语言中,单个反斜杠需要用\\表示,所以要匹配实际的两个反斜杠(JSON中显示为\\\\),就得写\\\\作为匹配字符串,替换为\\(即单个实际反斜杠)。
验证方法
可以在管道里加一个Set Variable活动,把拼接后的路径赋值给变量,运行后查看变量的实际值(注意不是JSON输出的显示值),或者直接在文件系统接收器中测试路径是否能正常访问。
内容的提问来源于stack exchange,提问作者Ashwin Mohan
相关产品推荐
相关产品推荐

