从windows下的bash开始一个bat脚本

时间:2018-02-23 12:47:59

标签: windows bash batch-file

我正在尝试从gow bash启动.bat文件。我可以成功启动一个批处理并使用以下命令返回bash(我在C:\tmp\a\目录中),文件a.bat文件的内容包含一个命令cd(用于打印当前工作目录):

$ cat a.bat
cd

$ cmd "/C a.bat"

c:\tmp\a>cd
c:\tmp\a
$

现在,如果我尝试从c:\tmp启动程序(目录结构层次结构中的一级),我会收到错误:

$ cmd "/C a\\a.bat"
'a' is not recognized as an internal or external command,
operable program or batch file.

$ cmd '/C a\a.bat'
'a' is not recognized as an internal or external command,
operable program or batch file.

$ cmd '/C a/a.bat'
'a' is not recognized as an internal or external command,
operable program or batch file.

如何在给定路径的情况下启动批处理脚本,并返回bash?

2 个答案:

答案 0 :(得分:1)

我想我找到了一个非常简单的解决方案: 在/ C

之前添加一个点
cmd ". /C a\a.cmd"

之后,gow(以及cygwin和alikes)停止将参数视为包含路径并将其转换为POSIX路径。
并且cmd忽略了/ C之前的所有内容(好吧,几乎所有内容,我认为)。

<强> a.cmd

@echo off
echo it's working

<强>输出

bash-3.1$ cmd ". /C a\a.cmd"
it's working
bash-3.1$

<强> [更新]

经过一番研究后,我发现POSIX path conversion对转换规则有一个非常清晰的描述 在您的情况下,似乎应用了规则An argument with a leading / is converted up to the first /.. 转换会导致'\'更改为'/'。因此,您获得a/a.cmd,即a,并带有切换/a.cmd。当然,这会导致观察到的错误。

上面的链接解决了MSYS并且似乎有点过时了,但是我已经从我刚刚安装的Git for Windows安装(基于MSYS2)中检查了bash中的一些规则,它们看起来像所描述的那样工作。

答案 1 :(得分:0)

经过一些研究并向其他论坛发布问题后,我发现以下附加信息“正确”运行作业:

cmd //D . //C "a\a.cmd"

参考文献: