'/d' 不是内部或外部命令 CC Switch
Quick fix
点“打开终端”选中中文工作目录后报 '/d' 时,先改用英文目录或用 mklink /J 建立英文 junction 绕过;彻底修复需让 .bat 全部使用 CRLF 并加 chcp 65001。
Symptom
Section titled “Symptom”'/d' 不是内部或外部命令CC Switch 在 Windows 上点 provider 卡片的“打开终端”并在目录选择框中选中文目录时,会把工作目录写进 %TEMP%\cc_switch_claude_*.bat。生成该 .bat 的 src-tauri/src/commands/misc.rs 使用 Rust 多行字符串,大部分行是 LF,而 cwd_command 一行硬编码为 CRLF,造成 LF/CRLF 混用。cmd.exe 只把 CRLF 当行结束,@echo off 与 cd /d "..." 被 LF 黏合成一行:英文路径时只是被 echo 打印、不切目录且不报错;中文路径时 UTF-8 字节被 GBK(936) 代码页解析成乱码,破坏参数解析,cmd 才会把 /d 当成独立命令执行,报 '/d' 不是内部或外部命令。同一问题还可能以 #3852 中的 The filename, directory name, or volume label syntax is incorrect. 或 系统找不到指定的路径。 等形式出现。
临时绕过:把要打开的工作目录改成纯英文路径,或执行 `mklink /J D:\my-project "D:\我的项目"` 后选择英文 junction 路径。
如需从源码修复:在 `src-tauri/src/commands/misc.rs` 生成临时 .bat 时,让所有换行显式使用 `\r\n`,并在 `@echo off` 后加入 `chcp 65001 >nul`,使 cmd 以 UTF-8 代码页解析中文路径。
// src-tauri/src/commands/misc.rslet content = format!("@echo off{cwd_command}echo Using provider-specific claude config:...", ...);let content = format!("@echo off\r\nchcp 65001 >nul\r\n{cwd_command}echo Using provider-specific claude config:\r\n...\r\n", ...);
Affected Versions
Section titled “Affected Versions”Source Issues
Section titled “Source Issues”本页汇总自 2 个真实 issue
- 为什么英文路径不报错,只有中文路径才报 '/d'?
- 因为 LF 把 @echo off 与 cd /d 黏合后,英文路径只是被 echo 打印,不报错但也不会切目录;中文路径的 UTF-8 字节被 GBK(936) 代码页解析成乱码,参数解析被破坏,/d 才被当成命令执行。
- 为什么还会看到系统找不到指定的路径。 / The filename, directory name, or volume label syntax is incorrect.?
- 这些是同一中文路径/编码问题的变体。即使修好换行符,如果 .bat 仍以 UTF-8 写中文而 cmd 默认是 GBK(936),cd /d 也可能找不到目录并报系统找不到指定的路径。
- 有没有不改源码的临时办法?
- 有。把工作目录改成纯英文路径最稳;也可以用 mklink /J 创建英文 NTFS junction 指向中文目录,再让 CC Switch 选择该 junction 路径。
这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。