Windows环境下near call调用Greeting合约传参报错如何解决?
Windows环境NEAR CLI传参报错解决方案
核心原因是Windows系统的CMD、PowerShell对引号的解析规则和类Unix Shell不同:官方示例中的单引号包裹JSON参数的写法仅适用于macOS/Linux环境,在Windows下运行时,单引号不会被识别为参数边界符,导致JSON内容被空格截断为多个独立参数,最终触发Unknown argument报错。
根据你使用的终端环境选择对应写法即可:
1. 传统CMD终端
需要用双引号包裹JSON整体,同时对JSON内部的双引号加反斜杠转义,正确命令如下:
near call %ID% saveMyMessage "{\"message\": \"bob? you in there?\"}" --account-id %ID%
2. PowerShell终端
两种可选写法:
- 写法一:双引号包裹JSON,内部双引号用连续两个双引号转义
near call $env:ID saveMyMessage "{""message"": ""bob? you in there?""}" --account-id $env:ID
- 写法二:先将参数转为JSON变量再传递,适合复杂参数场景,避免转义混乱
$param = @{message = "bob? you in there?"} | ConvertTo-Json -Compress near call $env:ID saveMyMessage $param --account-id $env:ID
注意事项
- 不要在Windows环境下直接使用单引号包裹JSON参数,CMD完全不支持单引号作为参数包裹符,PowerShell传递参数给原生exe时也会出现单引号解析异常
- 如果参数包含特殊字符,优先使用变量转JSON的方案,减少转义错误概率
内容的提问来源于stack exchange,提问作者Thao Le
相关产品推荐
相关产品推荐

