---
name: CreateCMD
description: 在当前目录打开指定数量的CMD窗口
---

在当前工作目录下打开指定数量的 CMD 命令提示符窗口。

## Usage

/CreateCMD [数量]

## Description

根据用户输入的数量，在当前工作目录下打开对应数量的 CMD 窗口。

**功能：**
- 询问用户需要打开的 CMD 窗口数量
- 在当前工作目录下打开指定数量的 CMD 窗口
- 每个窗口独立运行，互不影响

**示例：**
```
/CreateCMD 3    # 在当前目录打开 3 个 CMD 窗口
/CreateCMD      # 会询问需要打开的数量，然后执行
```

**执行步骤：**
1. 如果用户未提供数量参数，使用 AskUserQuestion 询问用户需要打开几个 CMD 窗口（提供 1、2、3、4 作为常见选项，也可输入其他数量）
2. 获取当前工作目录路径（Windows 形式，如 `E:\GithubData\ubains-module-test`）
3. **定位 claude 的完整路径**：在 bash 中运行 `which claude`，得到形如 `/e/nodejs/claude` 的路径，转换成 Windows 形式并补 `.cmd`，即 `E:\nodejs\claude.cmd`。原因是 `E:\nodejs` 不在 Windows PATH 里，新开的 cmd 窗口直接敲 `claude` 会报"不是内部或外部命令"，必须用完整路径。
4. **生成一个临时批处理文件**（如 `E:\GithubData\ubains-module-test\.claude\skills\CreateCMD\_run_claude.bat`），内容分两行，避免 `&&` 复合命令在引号传递时被截断：
   ```bat
   @echo off
   cd /d <当前目录>
   <claude 完整路径> --permission-mode bypassPermissions
   ```
5. **用真正的 Windows cmd `start` 打开 N 个窗口运行该 bat**。在 bash 中通过 `cmd.exe /c start` 调用（注意：bash 里直接写 `start` 会走 `/usr/bin/start` 这个 MSYS 封装脚本，它会把 `"cd ... && claude"` 这种复合命令的引号传坏，导致 claude 不执行）：
   ```bash
   for i in $(seq 1 N); do
     MSYS_NO_PATHCONV=1 cmd.exe /c start "Claude $i" cmd /k "<bat 完整路径>"
   done
   ```
6. 确认并告知用户已成功打开的窗口数量

**注意事项（两个坑，务必遵守）：**
- **不要用裸 `start`**：bash 里的 `start` 解析为 `/usr/bin/start`（MSYS 封装），会损坏 `&&` 复合命令的引号，表现为窗口打开、cd 成功但 claude 不执行。必须用 `cmd.exe /c start` 走 Windows 原生 `start`，并加 `MSYS_NO_PATHCONV=1` 防止 MSYS 路径转换。
- **不要用裸 `claude`**：`E:\nodejs` 不在 Windows PATH，cmd 窗口里找不到。必须用 `which claude` 推导出的 `claude.cmd` 完整路径。
- **用 .bat 文件承载命令序列**，而不是 `"cd ... && claude ..."` 单行，可彻底规避复合命令引号丢失问题。
- `/k` 参数确保窗口执行完命令后保持打开；工作目录设为 Claude Code 的当前工作目录。
- 数量上限建议不超过 10 个，避免系统资源占用过高。
