C#使用ProcessStartInfo执行CMD命令时报找不到文件异常
问题原因
for属于CMD的内置命令,并非独立的可执行文件,你直接将CMD命令作为ProcessStartInfo构造函数的第一个参数(目标进程路径)传入,系统无法找到对应可执行文件,因此抛出找不到文件的异常。ProcessStartInfo的参数使用逻辑错误,该构造函数第一个参数为要启动的可执行程序路径,第二个为传入该程序的运行参数,你将两条CMD命令分别填入两个参数的写法不符合API要求。- 命令本身存在多余空格的语法错误:
/ f、% i、set CID =% i、% CID %中的多余空格会导致命令逻辑错误,即使通过CMD直接运行也无法得到正确结果。
解决方法
正确的做法是启动cmd.exe程序,将你的命令通过/c参数传入CMD执行,修正后的代码如下:
// 拼接要执行的CMD命令,移除所有多余空格 string cmd = @"for /f ""delims="" %i in ('""C:\Program Files (x86)\AnyDesk\AnyDesk.exe"" --get-id') do set CID=%i & echo %CID%"; ProcessStartInfo psi = new ProcessStartInfo("cmd.exe", $"/c {cmd}") { UseShellExecute = false, RedirectStandardOutput = true, CreateNoWindow = true }; var proc = Process.Start(psi); // 等待命令执行完成后再读取输出,避免内容不全 proc.WaitForExit(); string output = proc.StandardOutput.ReadToEnd(); Console.WriteLine(output);
额外注意
- 请确认你的设备上
C:\Program Files (x86)\AnyDesk\AnyDesk.exe路径真实存在,如果安装路径自定义过需要对应修改。 - 如果你后续将该命令写入批处理文件运行,需要将命令中的
%i替换为%%i。
内容的提问来源于stack exchange,提问作者r.Sayt
相关产品推荐
相关产品推荐

