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