Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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
Windows 多个for循环用于设置变量,但只有第一个循环产生效果_Windows_Batch File - Fatal编程技术网

Windows 多个for循环用于设置变量,但只有第一个循环产生效果

Windows 多个for循环用于设置变量,但只有第一个循环产生效果,windows,batch-file,Windows,Batch File,这是我的Windows批处理文件: FOR /F %%a IN ('git rev-parse --abbrev-ref HEAD') DO SET branchName = %%a FOR /F %%a IN ('git rev-list --max-count^=1 %branchName%') DO SET localCommitId = %%a FOR /F %%a IN ('git rev-list --max-count^=1 origin/%branchName%') DO SET

这是我的Windows批处理文件:

FOR /F %%a IN ('git rev-parse --abbrev-ref HEAD') DO SET branchName = %%a
FOR /F %%a IN ('git rev-list --max-count^=1 %branchName%') DO SET localCommitId = %%a
FOR /F %%a IN ('git rev-list --max-count^=1 origin/%branchName%') DO SET remoteCommitId = %%a

@ECHO branchName = %branchName%
@ECHO localCommitId = %localCommitId%
@ECHO remoteCommitId = %remoteCommitId%
以下是我运行时看到的输出:

>FOR /F %a IN ('git rev-parse --abbrev-ref HEAD') DO SET branchName = %a

>SET branchName = develop

>FOR /F %a IN ('git rev-list --max-count=1 develop') DO SET localCommitId = %a

>SET localCommitId = e4375fa4753b3956e1454020a812cc7591cf606e

>FOR /F %a IN ('git rev-list --max-count=1 origin/develop') DO SET remoteCommitId = %a

>SET remoteCommitId = e4375fa4753b3956e1454020a812cc7591cf606e

branchName = develop
localCommitId =
remoteCommitId =
我不明白为什么
localCommitId
remoteCommitId
是空的,尽管打印的
SET
命令将它们设置为非空字符串


我猜
git
命令的功能与这个问题无关,因为如果我用
ver
替换它们,我也会遇到同样的问题,我还将添加一些解释。如果键入
set branch
,您将看到
branchName=develope
。这意味着变量实际上将被
%branchName%
调用,并将给出值
develope

更正了下面的代码

FOR /F %%a IN ('git rev-parse --abbrev-ref HEAD') DO SET branchName=%%a
FOR /F %%a IN ('git rev-list --max-count^=1 %branchName%') DO SET localCommitId=%%a
FOR /F %%a IN ('git rev-list --max-count^=1 origin/%branchName%') DO SET remoteCommitId=%%a

@ECHO branchName = %branchName%
@ECHO localCommitId = %localCommitId%
@ECHO remoteCommitId = %remoteCommitId%

尝试删除set命令中的空格,例如:
DO set branchName=%%a
有效!谢谢你可以把它贴出来作为答案。