"git" is not recognized as internal "blah blah" even though the command works the first time

This turned out to be a problem. I used "path" as one of my variables elsewhere in the script, not realizing that this is actually editing the PATH environment variable.

Original question:

I am writing a batch file. In a batch file, I have the following:

FOR /F "tokens=*" %%a IN ('git branch -r') DO CALL :SOMELABEL %%a

EXIT

:SOMELABEL
git status
START /B /WAIT CMD /C git status
FOR /F "tokens=*" %%n IN ('git status') DO ECHO %%n
GOTO :EOF

      

'git status' is just an example. Each of the 3 'git status return' 'git' commands is not recognized as an internal or external command, operating program, or batch file. "

This will usually be an environment variable (PATH) issue, but what makes this unique is that the first git command ("git branch -r") works. I have maybe 5 more batch files that can use the git command successfully. Any ideas as to why the later git commands won't work in the code above?

If it is due to a permissions issue (e.g. cannot execute another git command while something is happening in it), any idea how I can make this script work (preferably without the need for a temporary file)? Or makes a temporary file for the first command output the only way?

+3


source to share


3 answers


This must be the problem PATH

.

OP Lectrode confirms:

This was the way.
I just realized that in my original script, I was using for one of my variables. I didn't understand what was setting the environment variable . PATH


PATH

Apparently git uses a batch proxy . The command works when you change git status

to CALL git status

.


Original answer:



I just tested the following script successfully, following the syntax outlined in the DOS Batch - Function Tutorial section (and using the 'which' command I installed via gow ):

@echo off
echo.PATH=%PATH%
which git.exe
FOR /F "tokens=*" %%a IN ('git branch -r') DO CALL :myDosFunc %%a
call:myDosFunc
echo.&pause&goto:eof

:myDosFunc    - here starts my function identified by it`s label
echo. with param  %~1
which git.exe
git status
goto:eof

      

And it returned when executed in a git repository on Windows:

C:\prog\git\tests\my_repo>..\c.bat
PATH=Z:\apps\git176\bin;...
Z:\apps\git176\bin\git.exe
 with param  origin/master
Z:\apps\git176\bin\git.exe
# On branch master
nothing to commit (working directory clean)
 with param
Z:\apps\git176\bin\git.exe
# On branch master
nothing to commit (working directory clean)

      

So it works. (Since pointed to Magnus , I am not using exit

)

+2


source


I suspect it has to do with the exit. Is git state running up to this line?



0


source


My colleague said the following:

I'm pretty sure the comand interpreter interprets the whole command as a command, including spaces. Single quotes look dangerous to me, better try double quotes.

And to use a real scripting language, Windows PowerShell will now have a choice.

I tested a script that doesn't actually work CALL: somelabel, it says it doesn't know somelabel. The git commands run great, both are Win 7 / x64 and a decently current git (1.7.

0


source







All Articles