windows 我可以在cmd中关闭通配符扩展吗?

vshtjzan  于 2023-04-22  发布在  Windows
关注(0)|答案(1)|浏览(108)

我正在做一个项目来实现C语言中cmd的dir命令。
在cmd中运行用c语言编写的程序时,输入包含 * 的参数会自动将其转换为匹配的文件。
我该如何关闭它呢?或者你能用c写一段代码来避免它吗?
但是,如果可能的话,我希望使输入格式与现有的dir命令完全相同。
这个问题是用翻译器写的,所以如果你能考虑任何尴尬的表达方式,我将不胜感激。

int main(int argc, char *argv[]) {
    printf("%d\n", argc);
    for(int i=0; argv[i] != NULL; i++)
        puts(argv[i]);
    return 0;
}

find find.*
当我尝试这段代码时,只有一个结果

fnvucqvd

fnvucqvd1#

在Windows上,cmd.exe不负责glob扩展。相反,每个可执行文件都有责任根据自己的意愿执行此操作。通常,在使用MSVC构建时,此操作发生在C运行时(CRT)初始化代码中,然后才进入main函数(在Windows控制台应用程序中,main不是实际的入口点;mainCRTStartup是由CRT实现的)。
我不知道有什么方法可以禁用此功能,同时仍然使用标准的C main作为入口点。但是,您仍然可以使用WinAPI中的GetCommandLine函数访问未处理的命令行,或者CRT提供的_acmdln全局变量。在任何一种情况下,这些都将在一个未拆分的字符串中给予整个命令行。我需要手动拆分参数,包括处理引号等。

相关问题