在git控制台之外:如何执行批处理文件,然后返回git控制台?


73

我有一个小的实用程序脚本clear.bat,该脚本在我的源代码上做一些内务处理。

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

有时,我发现从Git bash(msy​​sgit,如果这很重要)执行它更方便。

为此,我输入

cmd
clear.bat
exit

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

能否以更简单的方式实现?

我尝试过,cmd /C clean.bat因为文档

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

编辑:
刚刚注意到该职位已损坏。

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


编辑2: 执行时cmd /C clean.bat,Git bash变为普通的CMD环境,仅显示提示。该文件clean.bat未执行。就像我只是键入一样cmd

另外,添加/debug开关实际上没有任何作用。似乎只cmd被评估,而所有其他参数都被忽略。


好的,我不确定我是否理解问题。
CB Bailey

做完后得到的输出是cmd /C clean.bat什么?您可能想尝试在字符串周围用引号引起来,或者用/K选项代替/C,或者添加/debug(不确定调试是否会有所帮助,但这听起来很有用)。
Sunil D.


5
cmd /C在Git Bash中不起作用,因为它认为这/C是一条路径并将其转换为C:`. Use cmd // C`。有关更多详细信息,请参见@hakre的链接。
Joey Adams

Answers:


91

经过多玩之后,我自己找到了解决方案:

cmd "/C clean.bat"

绝招。但是我不知道为什么


4
是的,我也想为您发布此消息-原因可能在这里(这是一个已知问题):code.google.com/p/msysgit/issues/detail?
id=426

2
有什么方法可以发送参数吗?
dr3w 2013年

1
@eckes nope,不为我工作。我正在尝试执行cmd"/C nvmw help"并收到错误消息:The syntax of the command is incorrect.,虽然cmd "/C nvmw"工作正常
dr3w 2013年

4
我为此编写了一个git bash脚本,称为“ bat”,现在您可以在命令行上执行bat mybat.bat了,它将执行#!/ bin / bash cmd“ / C $ 1”
relipse

6
以下内容解决了参数问题。扰流板://cstackoverflow.com/a/21907301/435605
AlikElzin-kilaka

48

./clear.bat 会成功的


1
在旧的(但与公司捆绑在一起的)msysgit 1.8.0中,此命令将bbat作为bash脚本执行
Bernard paulus

也许还要补充一下,这是在提出问题时尚不可用的新功能?
kalj '18年

2
这似乎可行,但是Git bash如何知道这是一个批处理文件?
HelloGoodbye 18/12/14

1
通常,shebang行(即#!/ bin / bash)将指示应使用哪种bash执行文件。但是,在Windows上,没有shebang的默认行为是将文件视为bash文件。
半马铃薯

6

混帐的Windows(msysGit已经通过GIT中的Windows取代1常见问题解答说,你有3种选择:

  • 使用该winpty实用程序运行有问题的程序。这使您可以继续使用更好的薄荷终端,但是如果您需要许多程序的解决方法,可能会变得笨拙。

  • 修改Git Bash的快捷方式以使其bash直接运行而无需mintty使用默认控制台主机,并将其配置为“快速编辑”,合理的大小和向后滚动以及合适的Unicode字体。您仍然必须忍受控制台主机的其他怪癖。

  • 安装并使用ConEmu


1
不。常见问题解答说从Git Bash运行某些本地控制台程序不起作用。如何解决?。这意味着,例如,当您从Git bash中运行它们时,某些程序可能会崩溃。但这不是上面讨论的问题。实际上,即使使用ConEmu,该问题仍然存在(尝试使用2.6.1.windows.1(最新和最大))!
eckes

你尝试了winpy吗?它为我工作。刚刚跑步winpty clean.bat
Yitzhak Steinmetz

2
不,我没有。但是,由于bash的这种行为是已知的,因此winpty确实可以解决此问题,这不奇怪-除了完成其原始工作之外。但是正确的解决方案是使用cmd //cstackoverflow.com/questions/21357813/…)而不安装其他软件!
eckes

1
winpty开箱即用git bash。在排除之前,我会尝试一下。
伊扎克·斯坦梅兹

1
cmd也是另一个程序,语法cmd //c clean.bat肯定比麻烦winpty clean.bat。我引用了其他两个选项作为通用答案,即使它们可能不适用于您的特定问题。
伊扎克·斯坦梅兹

2

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

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

1

在某些时候,Git for Windows添加了对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中,根据您针对编译运行时对参数进行不同的解析。基本上在Windows中,命令行参数作为“一个字符串”传递,然后由运行时解析。

看到这里比你想得到的更多解释。

例如,cmd解析参数不同wscript.exe

最后,您可以希望找到可以使用此方法的方法,并且这是三种解决方案中最“类似于窗口的方法”

方法

在这里已经很好地解释了,并且易于使用,但是增加了一个额外的/内容,不利于可读性

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.