Col*_*nic 10 .net c# cmd path command-prompt
给定命令的命令行样式路径,如bin/server.exe或ping,如何获取此可执行文件的完整路径(作为cmd或Process.Start将解析它)?
我试过Path.GetFullPath,但它总是相对于工作目录扩展.它bin/server.exe正确扩展,但是ping它返回c:\users\matt\ping(不存在).我想要c:\Windows\system32\ping.exe.
编辑:我想要与cmd相同的行为.一些考虑:
server为server.bat或server.exe(添加文件扩展名)我也尝试过Windows的命令行工具where.它几乎是我想要的:
显示与搜索模式匹配的文件的位置.默认情况下,搜索是在当前目录和PATH环境变量指定的路径中完成的.
>where ping
C:\Windows\System32\PING.EXE
>where bin\server
INFO: Could not find files for the given pattern(s).
Run Code Online (Sandbox Code Playgroud)
(由于'path'这两个词的两个不同含义,这个问题很难搜索到)
Rup*_*Rup 11
考虑到PATHEXT,从Serj-Tm的答案中窃取(对不起!给他+1):
public static string WhereSearch(string filename)
{
var paths = new[]{ Environment.CurrentDirectory }
.Concat(Environment.GetEnvironmentVariable("PATH").Split(';'));
var extensions = new[]{ String.Empty }
.Concat(Environment.GetEnvironmentVariable("PATHEXT").Split(';')
.Where(e => e.StartsWith(".")));
var combinations = paths.SelectMany(x => extensions,
(path, extension) => Path.Combine(path, filename + extension));
return combinations.FirstOrDefault(File.Exists);
}
Run Code Online (Sandbox Code Playgroud)
对不起,缩进有点无处不在 - 我试图让它不滚动.我不知道是否真的需要StartsWith检查 - 我不确定CMD如何处理没有前导点的pathext条目.
public static string GetFullPath(string filename)
{
return new[]{Environment.CurrentDirectory}
.Concat(Environment.GetEnvironmentVariable("PATH").Split(';'))
.Select(dir => Path.Combine(dir, filename))
.FirstOrDefault(path => File.Exists(path));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8829 次 |
| 最近记录: |