从git控制台出来:如何执行批处理文件然后返回到git控制台?

时间:2012-08-08 13:01:38

标签: windows git batch-file cmd

我有一个名为clear.bat的小实用程序脚本,可以对我的源代码进行一些内务处理工作。

这是一个.bat文件,因此我可以轻松地在Windows资源管理器中双击它。

有时候,我觉得从我的Git bash(msy​​sgit,如果这很重要)执行它会更方便。

为此,我输入

cmd
clear.bat
exit

cmd将我的Git bash变成了一个普通的cmd窗口,我可以轻松地执行我的批处理。当我输入exit时,cmd环境终止,我又回到了我的Git bash中。

这可以通过更简单的方式实现吗?

我试过cmd /C clean.bat,因为the docs

Syntax
      CMD [charset] [options]

      CMD [charset] [options] [/c Command] 

      CMD [charset] [options] [/k Command] 

Options   
   /C     Run Command and then terminate

   /K     Run Command and then return to the CMD prompt.
          This is useful for testing, to examine variables

修改
刚注意到帖子坏了。

我想要的是从Git bash中执行clean.bat,而无需输入上面的三个命令(cmdclear.batexit)。我只想在我的Git bash中执行.bat文件。显而易见的方法是创建一个单独的.sh文件来执行相同的工作,但这将导致双重代码。


编辑2: 当我执行cmd /C clean.bat时,Git bash变成一个普通的CMD环境,只显示提示。文件clean.bat未执行。这就像我输入cmd一样。

此外,添加/debug开关确实没什么。似乎仅评估了cmd,并且忽略了所有其他参数。

6 个答案:

答案 0 :(得分:71)

在玩了一下之后,我自己找到了解决方案:

cmd "/C clean.bat"

诀窍。但我不知道为什么......

答案 1 :(得分:37)

./clear.bat可以解决问题。

答案 2 :(得分:5)

Git for Windows(msysGit已被Git for Windows 1取代)FAQ表示您有3个选项:

  • 运行使用winpty实用程序时遇到问题的程序。这允许您继续使用更好的mintty终端,但如果您需要许多程序的解决方法,可能会变得笨拙。

  • 修改Git Bash的快捷方式,直接在不bash的情况下运行mintty,以便它使用默认的控制台主机,并将其配置为"快速编辑",合理的大小和向后滚动和合适的unicode字体。您仍然需要与控制台主机的其他怪癖一起生活。

  • 安装并使用ConEmu

答案 3 :(得分:1)

在某些时候,Windows版Git增加了对MSYS_NO_PATHCONV环境变量的支持,因此,除了@eckes和@ AlikElzin-kilaka解决方案之外,您还可以

MSYS_NO_PATHCONV=1 cmd /c clean.bat

总的来说,我更喜欢这种解决方案,因为它可以使代码与普通bash最为接近,并且有多种方法可以导出MSYS_NO_PATHCONV,具体取决于您的首选情况。

注意:Git for Window的bash不支持MSYS2环境变量MSYS2_ARG_CONV_EXCL

其他解决方案

奇怪的报价解决方案

为什么cmd "/c clean.bat"不产生其他错误?

原来,Windows中的参数解析与* nix中的通用规则不同。取而代之的是,在Windows中,根据runtime you compile against对参数进行了不同的解析。基本上在Windows中,命令行参数作为“一个字符串”传递,然后由运行时解析。

请参阅here,以获取比您期望的更多的解释。

例如cmdwscript.exe

解析参数不同

最后,您可以找到可以使用此方法的东西,这是这三种解决方案中最“窗外的”方式

//方法

here解释得很好并且易于使用,但是增加了一个额外的/,这不利于可读性

答案 4 :(得分:0)

我喜欢start clean,它会打开一个带有cmd的新窗口。这种方法有一些好处:

  • cmd.exe获取本机控制台
  • 新控制台具有本机Windows字符编码(例如cp1251 vs utf8)

答案 5 :(得分:0)

这会起作用,它也会释放终端

  nohup ./nucleus.bat &
  less nohup.out