You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell新手问题:如何执行包含@符号的命令?

解决PowerShell中执行带@符号的curl命令报错问题

这个问题的核心是PowerShell对@符号有特殊语法含义(用于Splatting参数传递),你直接把DOS里的curl命令用字符串包裹后通过iex执行时,PowerShell会把@somejson_ok.json当成自己的语法解析,而不是原样传给curl程序,所以才会触发报错。

给你几个可行的解决办法:

方法1:直接调用真正的curl程序(推荐)

PowerShell里默认的curl是Invoke-WebRequest的别名,并非你在DOS中使用的原生curl程序。你可以直接用curl.exe明确调用系统里的curl,这样参数里的@会被正确传递给curl,不会被PowerShell解析:

curl.exe --ntlm -d @somejson_ok.json --header "Content-Type: application/json" -u : -X POST http://localhost/someaction

方法2:转义@符号后再用iex执行

如果你一定要通过字符串+iex的方式执行,需要用PowerShell的转义字符(反引号`)把@转义,同时字符串里的双引号也要转义:

$command = "curl.exe --ntlm -d `@somejson_ok.json --header `"Content-Type: application/json`" -u : -X POST http://localhost/someaction"
iex $command
Read-Host "Done"

方法3:使用Here-String定义命令

Here-String可以让你直接编写原始格式的命令,不需要转义双引号和@,写法更直观:

$command = @"
curl.exe --ntlm -d @somejson_ok.json --header "Content-Type: application/json" -u : -X POST http://localhost/someaction
"@
iex $command
Read-Host "Done"

总结来说,方法1是最稳妥的选择,直接调用curl.exe能避开PowerShell的别名和语法解析问题,操作简单不易出错。

内容的提问来源于stack exchange,提问作者yonexbat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:22:21