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

如何关闭CMD通配符展开?C语言实现dir命令相关问题

解决Windows CMD中C程序参数通配符自动扩展问题

在Windows CMD环境中,外部程序(比如你编写的C程序)的命令行参数会被CMD自动进行通配符扩展(将*/?替换为匹配的文件),而内置命令如dir是自己处理通配符,不会依赖CMD的扩展。要实现和dir一致的输入格式,你需要跳过CMD的自动扩展,直接获取原始命令行参数并自行处理。

实现方案:获取原始命令行参数

Windows提供了API可以直接获取未被扩展的原始命令行字符串,再自行解析参数。以下是具体代码:

#include <windows.h>
#include <stdio.h>

int main() {
    // 获取原始宽字符命令行
    LPWSTR rawCmdLine = GetCommandLineW();
    int argc;
    // 解析命令行参数,得到未扩展的参数列表
    LPWSTR* argv = CommandLineToArgvW(rawCmdLine, &argc);

    if (!argv) {
        printf("命令行解析失败\n");
        return 1;
    }

    // 输出参数数量及每个参数(转多字节输出)
    printf("参数数量:%d\n", argc);
    for (int i = 0; i < argc; i++) {
        char buf[512];
        WideCharToMultiByte(CP_ACP, 0, argv[i], -1, buf, sizeof(buf), NULL, NULL);
        printf("参数%d:%s\n", i, buf);
    }

    // 释放系统分配的内存
    LocalFree(argv);
    return 0;
}

代码说明

  1. GetCommandLineW():获取用户输入的完整原始命令行,不会被CMD进行通配符扩展。
  2. CommandLineToArgvW():系统提供的参数解析函数,能正确处理带引号的参数,且不会扩展通配符,返回解析后的参数数组和数量。
  3. 宽字符转多字节:因为Windows API默认用宽字符,这里转成多字节方便控制台输出,如果你用宽字符输出(如wprintf)可以省略这一步。

后续扩展

如果要完全模拟dir的功能,你需要在拿到原始参数后,自行实现通配符匹配逻辑(比如遍历目录、匹配文件名),而不是依赖CMD的自动扩展。

内容的提问来源于stack exchange,提问作者nunanunna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:12:49