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

Bat调用PowerShell创建JSON文件时引号与大括号转义问题求助

解决Bat调用PowerShell写入JSON内容时的转义问题

问题原因

Bat和PowerShell的转义规则完全不同:

  • PowerShell用反引号`作为转义符;
  • Bat用脱字符^作为转义符,且会自动解析命令行中的引号、特殊字符,导致传递给PowerShell的参数被篡改。

直接调整转义的解决方案

修改Bat中的命令,适配两种环境的转义规则:

powershell -Command "New-Item -Path $env:userprofile\Desktop\Cloack -Name 'test.json' -ItemType 'file' -Value '{ `"a`":b, ``n `"b`":c, etc .}'"

关键调整点:

  • 用单引号包裹不需要转义的参数(如'test.json'),避免和外层双引号冲突;
  • Bat中要传递给PowerShell的双引号,需用^转义为";
  • PowerShell的换行符`n,在Bat中要写成 n ``(两个反引号),因为Bat会吃掉其中一个。

更可靠的Base64编码方案

如果命令复杂,转义容易出错,推荐用PowerShell的-EncodedCommand参数:

  1. 先在PowerShell中生成命令的Base64编码:
$cmd = 'New-Item -Path $env:userprofile\Desktop\Cloack -Name "test.json" -ItemType "file" -Value "{ `"a`":b, `n `"b`":c, etc .}"'
[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($cmd))
  1. 将输出的编码字符串复制到Bat中:
powershell -EncodedCommand VgBlAHMAdABJAHQAZQBtACAALQBQAGEAdABoACAAJABlAG4AdgA6AHUAcwBlAHIAcAByAG8AZgBpAGwAZQAkAEQAZQBzAGsAdABvAHAAXABDAGwAbwBhAGMAawAgAC0ATgBhAG0AZQAgACIAdABlAHMAdAAuAGoAcwBvAG4AIgAgAC0ASQB0AGUAbQB0AHkAcABlACAAIgBmaWxlACIAIAAtAFYAYQBsdQBlACAAIgB7ACAAYQBcADoAYgAsACAAYgBcADoAYwAsACAAZXRjACAAIgA=

这种方式完全避开转义冲突,确保命令原封不动传递给PowerShell执行。

内容的提问来源于stack exchange,提问作者Андрей Киселев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:23:28