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

Is there a WinAPI to get filename from a command line with optional spaces and other parameters?

本文关键字:参数 其他 命令行 文件名 获取 空格 WinAPI 有一个 是否      更新时间:2023-10-16

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

C:WINDOWSsystem32mstsc.exe /v:%WKSNAME% /f
"C:UsersUser NameDesktopMy Program.exe" /?

API应分别返回以下内容:

mstsc.exe
My Program.exe

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

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

PS。必须有一个操作系统在内部用来解析这些内容。

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可能是您想要的。来自文档:

在路径中搜索文件名。

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


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

这个函数的解析规则相当复杂,所以一定要仔细查看文档,但在这个答案中可以找到它们的简单解释。