Ммм, я считаю, что единственный надежный способ сделать это - получить доступ к файловой системе, предположив, что она достижима.
Я бы обрезал строку в пробелах, начиная с конца, и взял бы самое длинное из существующих в файловой системе.
Например:
C:\My Folder\Some File.exe -i -d
=>
C:\My Folder\Some File.exe -i -d (no, although it might exist!)
C:\My Folder\Some File.exe -i (no)
C:\My Folder\Some File.exe (yes => That's this one)
Вы должны учитывать относительные пути и файлы в PATH (как ваш первый пример, т.е. все exe-файлы - еще хуже, вы можете написать foo.exe или foo в командной строке!).
Кроме того, вы часто можете писать такие вещи, как notepad/p
, что не упрощает алгоритм, зная, что C:/windows/notepad.exe
- это правильный путь в XP! : -)