arthur
arthur

Reputation: 1064

starting a bat script from bash under windows

I am trying to start a .bat file from gow bash. I can sucessfully start a batch and return to bash with the following (I am in C:\tmp\a\ directory), the content of the file a.bat file consists a single command cd (to print the current working directory):

$ cat a.bat
cd

$ cmd "/C a.bat"

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

Now if I try to start the program from c:\tmp (one level higher in the hierarchy of directory structure), I get an error:

$ 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.

How can I start a batch script given a path to it, and return to bash?

Upvotes: 0

Views: 558

Answers (2)

arthur
arthur

Reputation: 1064

After a bit of research and posting questions to other forums I found the following additional info to run the job "correctly":

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

References:

Upvotes: 0

wolfrevokcats
wolfrevokcats

Reputation: 2100

I guess I found a very simple solution: Add a dot before /C

cmd ". /C a\a.cmd"

After that gow (and cygwin and alikes) stop treating the argument as containing paths and converting it to POSIX paths.
And cmd ignores everything up to /C (well, almost everything, I think).

a.cmd:

@echo off
echo it's working

output:

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

[Update]

After some research I found that POSIX path conversion has a very clean description of conversion rules.
In your case the rule An argument with a leading / is converted up to the first /.. seems to be applied.
Conversion results in changing '\' to '/'. So, you get a/a.cmd, that is a with a switch /a.cmd. And this results in the observed error, of course.

The link above addresses MSYS and seems to be a bit outdated, but I've checked some of the rules in bash from my fresh Git for Windows installation (based on MSYS2), and they look working as described.

Upvotes: 1

Related Questions