从Cygwin内部运行cmd.exe


16

我想在工作中使用Cygwin作为我的主外壳,但是我的小组将批处理文件用于多个进程。有人告诉我可以cmd /c batch.bat从Cygwin运行批处理文件。这适用于某些情况,不适用于其他情况。批处理文件之一在执行此操作时完全失败,但从cmd shell运行该文件时效果很好。

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

我想接下来要尝试的是找到一种在其自己的不同窗口中实际启动cmd的方法,就像您转到Start-> Run,然后键入“ cmd”一样。有没有办法从Cygwin内部做到这一点?

Answers:


8

/?被bash视为模式,问号将适合单个字符,因此,如果Cygwin根目录中有任何一个字母文件或目录,该模式将被替换为这些模式。echo /?会告诉你这是怎么回事。您可以使用反斜杠转义问号:/\?。或引用整个参数:'/?'

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


在我的win xp sp2 latop上,以下代码片段将起作用:cygstart / cygdrive / c / WINDOWS / system32 / cmd
Michael Mao

14

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

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

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

cmd /?是一条红鲱鱼:Cygwin根目录中大概有一个字符长的目录,因此该Shell扩展/?并运行cmd时碰巧没有产生任何输出。


我需要将shell变量粘贴到cmd参数中,因此我发现以下方法可以解决Bash和cmd解析器:u ='DOMAIN \ ACC'p ='X <12'r ='{Baz 3.1 5-x-(TTT )}'d = $'\“'cmd / c foo.bat -u%d %% u %% d%-p%d %% p %% d%-fooBar%d %% r %% d%- fooBAR true
eel ghEEz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.