跳转到内容

'/d' 不是内部或外部命令 CC Switch

Quick fix

点“打开终端”选中中文工作目录后报 '/d' 时,先改用英文目录或用 mklink /J 建立英文 junction 绕过;彻底修复需让 .bat 全部使用 CRLF 并加 chcp 65001。

报错原文
'/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. 或 系统找不到指定的路径。 等形式出现。

  1. 临时绕过:把要打开的工作目录改成纯英文路径,或执行 `mklink /J D:\my-project "D:\我的项目"` 后选择英文 junction 路径。

  2. 如需从源码修复:在 `src-tauri/src/commands/misc.rs` 生成临时 .bat 时,让所有换行显式使用 `\r\n`,并在 `@echo off` 后加入 `chcp 65001 >nul`,使 cmd 以 UTF-8 代码页解析中文路径。

    // src-tauri/src/commands/misc.rs
    let 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", ...);
ToolClaude Code
Version3.16.1 - 3.17.0(受影响)
PlatformsWindows
为什么英文路径不报错,只有中文路径才报 '/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。本站不分发任何软件。