c++ - 是否有 WinAPI 可以从带有可选空格和其他参数的命令行获取文件名?

标签 c++ c windows winapi

我的目标是从命令行调用/字符串中获取文件名。例如,如果我在输入中有以下字符串:

C:\WINDOWS\system32\mstsc.exe /v:%WKSNAME% /f
"C:\Users\User Name\Desktop\My Program.exe" /?

API 应分别返回以下内容:

mstsc.exe
My Program.exe

所以我尝试使用splitpath函数,虽然它适用于非常简单的文件路径,但在我上面的两个示例中它完全失败了。

我知道我可以编写自己的解析器(所以请不要提供它。)我很好奇是否已经有一个内置的 Windows API 可以做到这一点?

附言。必须有一个操作系统在内部使用来解析它们。

PS2。这是我一直在玩弄的代码:

TCHAR buffFileName[MAX_PATH];
TCHAR buffExt[MAX_PATH];

LPCTSTR strInputPath = L"C:\\WINDOWS\\system32\\mstsc.exe /v:%WKSNAME% /f";
if(_tsplitpath_s(strInputPath, NULL, 0, NULL, 0, buffFileName, MAX_PATH, buffExt, MAX_PATH) == 0)
{
    //Got something
}

最佳答案

我相信PathFindFileName可能是你要找的。来自文档:

Searches a path for a file name.

文档中的示例似乎显示了您描述的确切行为。


如果您想解析整个命令行,CommandLineToArgvW可能会有帮助。它采用命令行并将其拆分为包含文件名和任何参数的数组。

此函数的解析规则相当复杂,因此请务必查看文档,但可以在 this answer 中找到对它们的简单解释。 .

关于c++ - 是否有 WinAPI 可以从带有可选空格和其他参数的命令行获取文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36684432/

相关文章:

c - 为什么这个解n皇后的复杂度这么大?

c - intmax_t 和 long long int 一样吗?

windows - Windows 的源代码树似乎无法使用有效的 SSH key

c++ - shared_ptr 的分配是否会破坏 `this` 指针

c++ - Mingw+MSYS 中 libevent 的静态编译错误

c++ - 如何分配一个二维 vector ?

c# - WPF:如何在具有不同名称的 for 循环内创建 UserControl 的多个实例?

android - Nexus 7 (2013) 和 Win 7 64 - 尽管检查了许多论坛和在线资源,但无法安装 USB 驱动程序

c++ - 我可以在 Azure 上运行 native C++ 二进制文件吗?

c++ - 在 C++ 中将参数传递给 unordered_set 哈希函数的语法