解决 Windows 下 PowerShell/cmd/Git Bash 的乱码、引号转义、路径空格和 CRLF 等问题,适用于报错、编码、JSON 传递等终端问题。
在 Windows 上排查 PowerShell / cmd / Git Bash 下的命令失败、乱码与换行问题。先识别 当前 shell,再归类: shell 混用、 引号与转义、 编码与 code page、 路径与空格、 CRLF/LF。用 可粘贴命令 与 references 中的清单/剧本修复;写无 BOM UTF-8 见正文与 encoding-checklist.md 中的 [System.IO.File]::WriteAllText 示例。不要一上来盲改命令。
export、 grep | xargs 等)\uXXXX 字面量、mojibake、控制台编码典型问法示例:「这个 bash 命令在 PowerShell 为什么报错?」「同样命令在 Linux 能跑,Windows 不行。」
先识别当前 shell。
再看失败命令长什么样。
<<EOF、 cat <<'EOF'、 export、 /dev/null、 grep | xargs 之类,优先怀疑是 bash 语法被直接贴进来了。$env:NAME=...、 ConvertTo-Json、 Out-File、反引号转义,优先怀疑是 PowerShell 语法被贴错地方。归类错误。
<、 |、 &、 @、 {、 } 附近报解析错误:通常是 shell 不匹配或转义问题。\uXXXX 字面量、mojibake:通常是编码问题。用 最低风险 的方式重写。
ConvertTo-Json,或先写临时文件再由工具读取。最后简短说明根因。
修命令时,优先按这个结构回答:
保持实用,不要上来长篇讲 shell 理论。
在 PowerShell 里优先用:
ConvertTo-Json -Depth N避免直接照搬 bash heredoc:
bash
python - <<'PY'
...
PY
这不是合法的 PowerShell 语法。
PowerShell 里更稳的是:
powershell
@'
print("hello")
'@ | python -
如果引号层次复杂,优先写临时文件。
先检查:
\uXXXX优先做法:
Set-Content -Encoding UTF8[System.IO.File]::WriteAllText(..., [System.Text.UTF8Encoding]::new($false))详见 references/encoding-checklist.md。
优先检查:
优先给出带引号路径:
powershell
python ".\scripts\tool.py"
Get-Content ".\data\input file.json"
当用户把 Unix 风格命令贴到 Windows shell:
详见 references/powershell-vs-bash.md。
< 或 heredoc:先怀疑 bash 语法被贴进 PowerShell。路径相对本技能目录(仓库中多为 skill/windows-shell-encoding-doctor/...)。
文件何时读references/powershell-vs-bash.mdShell 翻译、bash/PowerShell 混用判断references/encoding-checklist.md乱码、UTF-8/BOM、JSON 转义、CRLF/LFreferences/common-failures.md有具体报错模式、快速归因references/repair-playbooks.md按「输入 → 诊断 → 修复」救火references/json-and-stdin-patterns.mdJSON、stdin、多行 payload、中文经管道/文件传递