"git" не распознается как внутренний "бла-бла, хотя команда работает в первый раз - PullRequest
3 голосов
/ 22 марта 2012

Это закончилось проблемой пути.Я использовал «путь» в качестве одной из моих переменных в другом месте скрипта, не понимая, что это фактически отредактировало переменную среды PATH.

Оригинальный вопрос:

Я пишу командный файл.В командном файле у меня есть следующее:

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' - просто пример.Каждая из 3 команд 'git status' возвращает «git» не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл. "

Обычно это может быть проблема переменной среды (PATH),но что делает это уникальным, так это то, что работает первая команда git ("git branch -r").У меня есть 5 других командных файлов, которые также могут успешно использовать команду git.Любые идеи относительно того, почему более поздние команды git не будут работать в приведенном выше коде?

Если это происходит из-за проблем с разрешениями (например, не может выполнить другую команду git, пока выполняется какая-то вещь),Любая идея, как я мог бы заставить этот скрипт работать (желательно без необходимости создания временного файла)?Или единственный способ сделать временный файл для вывода первой команды?

Ответы [ 3 ]

2 голосов
/ 22 марта 2012

Это должна быть проблема PATH.

OP Lectrode подтверждает:

Это была проблема пути.
Iтолько что понял, что в моем исходном скрипте я использовал path для одной из моих переменных.
Я не осознавал, что устанавливаю переменную окружения PATH.

Очевидно, git использует эту вещь «пакетный прокси» .
Команда работает при изменении git status на CALL git status.


Оригинальный ответ:

Я только что успешно протестировал следующий скрипт, следуя синтаксису, описанному в " DOS Batch - Руководство по функциям " (и используя команду 'which', которую я установил через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

И оно вернулось при выполнении в репозитории Git в 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)

Так что, похоже, работает.(Как указал Магнус , я не использую exit)

0 голосов
/ 23 марта 2012

Мой коллега сказал следующее:

Я почти уверен, что интерпретатор команд интерпретирует всю команду как команду, включая пробелы.Одиночные кавычки выглядят опасно для меня, лучше попробуйте двойные кавычки.

И используйте настоящий язык сценариев, для Windows PowerShell был бы выбор в наше время.

Я протестировал сценарий, на самом деле не работает CALL: somelabel, он говорит, что не знаетsomelabel.Команды git выполняются нормально, обе они Win 7 / x64, и прилично текущий git (1.7.

0 голосов
/ 22 марта 2012

Я подозреваю, что это связано с выходом.Работает ли git status до этой строки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...