从 Cygwin 内部运行 cmd.exe

从 Cygwin 内部运行 cmd.exe

我想在工作中使用 Cygwin 作为主 shell,但我的小组使用批处理文件执行多个进程。有人告诉我,我可以直接cmd /c batch.bat从 Cygwin 运行批处理文件。这在某些情况下有效,但在其他情况下无效。当我这样做时,其中一个批处理文件完全失败,但当我从 cmd shell 运行它时,它工作正常。

我注意到的另一个奇怪之处是,如果我cmd /?从 Cygwin 运行,则不会得到任何输出。从 cmd shell 运行此命令会提供标准帮助。即使执行也不会cmd /c cmd /?提供任何输出。如果我cmd从 Cygwin 运行,它会给我 cmd shell,然后如果我运行cmd /?,我会得到帮助文本,但没有分页符。

我想接下来要尝试的是找到一种方法来真正在它自己的独特窗口中启动 cmd,就像您转到“开始”->“运行”,然后键入“cmd”一样。有没有办法在 Cygwin 中执行此操作?

答案1

/?被 bash 视为一种模式,其中问号适合单个字符,因此如果您的 Cygwin 根目录中有任何单字母文件或目录,则该模式将被替换为这些文件或目录。echo /?将显示是否发生了这种情况。您可以使用反斜杠转义问号:/\?。或者引用整个参数:'/?'

cygstart c:/windows/system32/cmd将在其自己的窗口中启动 cmd.exe。

答案2

您可以直接从 Cygwin shell 运行批处理文件,甚至不需要中间调用cmd。如果批处理文件需要参数,则需要以 Windows 方式引用它们;运行 可能会更简单cmd /c 'foo.bat "quoted arguments"'

您没有说明在哪个终端中运行 shell。批处理文件本身并不关心这一点,但从批处理文件执行的命令可能会关心。Cygwin 终端仿真器不模拟 Windows 控制台,因此它们适用于 Cygwin 程序和仅 stdio 程序,但不适用于 Windows 控制台程序。

如果通常在 Cygwin 终端(例如 rxvt 或 mintty)中运行 Cygwin shell,您可以在单独的 Windows 控制台中使用 运行问题批处理文件start foo.bat。您可能需要运行控制台2作为 Windows 控制台的更好替代品,并在 Console2 中运行 Windows 控制台应用程序,在 Cygwin 终端(甚至在 Console2 中)运行 Cygwin 应用程序。

cmd /?是一个转移注意力的幌子:Cygwin 根目录中可能有一个字符长的目录,因此 shell 会扩展/?cmd使用恰好不产生任何输出的开关运行。

相关内容