是否可以用其他东西替换CMD?

时间:2010-09-16 04:55:50

标签: windows shell operating-system terminal cmd

我从未研究过操作系统,所以请原谅我,如果这听起来很基本或愚蠢,但我很好奇是否可以在Windows中替换cmd提示符。我并不是要求实际执行此操作的程序,因为我环顾四周并没有真正看到过。

我要问的是1)是否实际上可以编写一个像cmd一样的全新程序,2)如果可以用它替换cmd,假设它至少可以执行cmd所做的所有工作

因为看起来甚至声称升级它的程序(cygwin,powershell等)实际上都在同一个小黑窗口中运行。也许我只是不完全理解cmd如何适合整个Windows,或者像bash这样的东西实际连接到linux。

任何人都想引导我朝着正确的方向前进?

4 个答案:

答案 0 :(得分:4)

“同样的小黑窗口”是Windows“控制台”子系统的一项功能。控制台模式应用程序几乎免费获取该窗口,并且当它们从Windows而不是从命令行启动时,为它们打开(由Windows本身或运行时库,我忘记了)。 (从现有控制台运行的控制台模式程序倾向于借用父进程的控制台。)

控制台应用程序外观相似并不一定意味着它们都是从cmd.exe运行的(虽然通常有批处理文件启动它们,它们可以自己启动),但它们都使用相同的子系统和相同的功能。

尽管如此,很有可能为cmd.exe编写替代品。它只是一个控制台应用程序。这个问题使其兼容性足以运行批处理文件(以免现有应用程序在他们希望使用cmd.exe时中断),并且仍然具有足够的灵活性来添加要添加到shell中的任何内容。

答案 1 :(得分:2)

这可能会帮助您引导可在Windows上使用的替代命令shell :) CMD.EXE只是一个提供CLI界面的程序。事实上有很好的选择。

答案 2 :(得分:1)

您可以编写一个允许您创建和执行批处理(.bat)文件的应用程序。

例如,假设您使用C#作为您的语言。您可以打开文本流来创建(.bat)文件。那么,你可以像这样执行它们:

ProcessStartInfo CmdReplacement = new System.Diagnostics.ProcessStartInfo();

//choose a name and then arguments that you want to send to the command prompt
CmdReplacement.FileName = @"C:\testfile.bat";
CmdReplacement.Arguments = "1 2 3 4";

//if you use this property it will prevent a console window from popping up
pi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

//create new process and set starting information
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = CmdReplacement;


//set this to tell you when the process has completed
p.EnableRaisingEvents = true;

p.Start();

//wait until the process has completed
while(!p.HasExited)
{
System.Threading.Thread.Sleep(1000);
}

//check to see what the exit code was
if(p.ExitCode != 0)
{
//some error occurred
}

答案 3 :(得分:0)

CMD.EXE只是一个程序。没什么特别的。