Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git &引用';吉特';不被视为“内部”;废话废话,即使命令第一次起作用_Git_Batch File - Fatal编程技术网

Git &引用';吉特';不被视为“内部”;废话废话,即使命令第一次起作用

Git &引用';吉特';不被视为“内部”;废话废话,即使命令第一次起作用,git,batch-file,Git,Batch File,这最终成为一个路径问题。我在脚本的其他地方使用“path”作为变量之一,但没有意识到这实际上编辑了环境变量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

这最终成为一个路径问题。我在脚本的其他地方使用“path”作为变量之一,但没有意识到这实际上编辑了环境变量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状态”只是一个例子。3个“git status”命令中的每一个都返回“'git'未被识别为内部或外部命令、可操作程序或批处理文件。”

通常情况下,这是一个环境变量问题(PATH),但是第一个git命令(“git-branch-r”)起作用,这是唯一的。我可能还有其他5个批处理文件可以成功地使用git命令。关于为什么以后的git命令在上面的代码中不起作用,有什么想法吗


如果是由于权限问题(比如在某个git命令正在执行时无法执行另一个git命令之类的事情),您知道如何使该脚本工作(最好不必创建临时文件)?还是为第一个命令的输出创建临时文件是唯一的方法?

我怀疑这与退出有关。git状态在该行之前起作用吗?

但它应该是路径问题

委员会确认:

这是一个路径问题。
我刚刚意识到,在我的原始脚本中,我对我的一个变量使用了路径 我没有意识到这是在设置环境
PATH
变量

显然git就是这么用的。
当您将
git status
更改为
CALL git status
时,该命令起作用


原始答复:

我刚刚按照“”中描述的语法(并使用我安装的'which'命令)成功测试了以下脚本:

当在Windows上的Git repo中执行时,它确实返回了:

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)

所以它似乎起作用了。(到目前为止,我不使用退出)

我的同事说:

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
我很确定comand解释器将整个命令解释为一个包含空格的命令。单引号对我来说很危险,最好试试双引号

使用真正的脚本语言,因为Windows PowerShell将是当今的选择


我测试了这个脚本,实际上不起作用的是调用:somelabel,它说它不知道somelabel。git命令执行得很好,两个命令都赢得了7/x64和一个相当当前的git(1.7.

我一年前就遇到了这个问题,但我记不起修复方法了。这是一个非常邪恶的问题。愚蠢的问题,可能与此无关,但是:您是否安装了cygwin?cygwin没有安装在这台特定的计算机上?我将给我处理这个问题的前同事发邮件。也许他能记住它是什么。谢谢您的输入。运行您提供的代码(减去“which”命令和标签注释)结果是“with param-branch name-系统找不到指定的批标签-myDosFunc”,这同样是奇怪的,因为如果它找不到它,它就不会处理
echo.with param
了。我可能只需要重新安装windows。有些地方不对劲。使用
EXIT
GOTO:EOF
没有任何效果不同之处。@electrode:关于您的错误消息,下面的SO问题会有帮助吗?呃,这是一个路径问题。我刚刚意识到在我的原始脚本中,我对一个变量使用了
path
。我没有意识到这是在设置环境路径变量。感谢您帮助我实现此错误@VonC谢谢,他显然git使用了“批处理代理”事情。当您将
git status
更改为
CALL git status
@electrode:interest时,该命令会起作用。我已将您的结论包含在答案中,以提高可见性。将
EXIT
替换为
GOTO:EOF
并没有什么区别。我的所有其他批处理文件在大多数代码之前都有
EXIT
nd它们运行良好。Thx用于输入tho1)使用单引号是有原因的。双引号会将内容视为字符串而不是命令。空格是命令的一部分。2)Powershell可能较新,具有更多功能,但对于可以轻松在您的计算机上运行的快速脚本,批处理仍然是一条路要走。如果我需要这个功能,我宁愿使用c。我不能仅仅给一个非技术性的朋友一个powershell脚本,然后期望他们知道如何使用它。而且,无论如何,这里不是讨论这个问题的地方。3)
CALL:somelabel
不是问题所在(查看答案)Thx对于您的输入tho=)