运行持久命令提示符命令

时间:2014-12-14 21:24:32

标签: c# windows cmd command-prompt

我正在考虑编写一种命令提示包装器作为学习练习。基本上用户在控制台窗口中输入命令,命令通过cmd.exe执行。

" Run Command Prompt Commands"通过cmd.exe处理命令的执行,同时" Process.start: how to get the output?"负责获得最终的输出。

我还有一个问题需要解决。这种通过cmd.exe执行命令的方法会导致进程启动,执行任何操作,然后终止。因此,如果我执行类似cd..的操作,则状态的预期更改不会在后续命令之间保留,并且您将看到您保留在同一工作目录中。

是否可以在维护持久性cmd.exe会话的同时执行shell命令?

2 个答案:

答案 0 :(得分:2)

根本不要使用/c来运行命令。保持cmd.exe一直打开,并重定向stdin,就像重定向stdout一样,然后根据需要提供命令。

var proc = new Process {
    StartInfo = new ProcessStartInfo {
        FileName = "cmd.exe",
        UseShellExecute = false,
        RedirectStandardError = true,
        RedirectStandardOutput = true,
        RedirectStandardInput = true,
        CreateNoWindow = true
    }
};

proc.StdIn.WriteLine("cd ..");
// other commands from the user

作为奖励,它可以处理衍生过程中的各种状态;诸如%ERRORCODE%之类的东西,设置变量,更改提示,甚至运行嵌套的解释器。

答案 1 :(得分:0)

Windows中的每个进程(包括CMD.EXE等shell)都有一个当前目录。您可以使用Directory.SetCurrentDirectory更改.NET中的当前目录。在命令提示符中执行cd ..不会启动新的cd进程。相反,CMD.EXE直接处理cd命令,并使用Windows API更改命令处理器的当前目录。您必须在命令处理器中执行类似的操作。