Batch file 批量变量减法

Batch file 批量变量减法,batch-file,Batch File,我似乎无法使批处理脚本中的变量正确相减。我有以下资料: set /P head=<..\BUILD_NUMBER.dat echo %head% > ..\HEAD.dat set desired=%5 echo %desired% > ..\test.dat set /a "version=%desired%-%head%" echo %version% > ..\version.dat git checkout @{%version%} echo %des

我似乎无法使批处理脚本中的变量正确相减。我有以下资料:

set /P head=<..\BUILD_NUMBER.dat

echo %head% > ..\HEAD.dat

set desired=%5

echo %desired% > ..\test.dat

set /a "version=%desired%-%head%"

echo %version% > ..\version.dat

git checkout @{%version%}
echo %desired% > ..\BUILD_NUMBER.dat 
echo %desired% > ..\build\BUILD_NUMBER.dat 
set/P head=..\head.dat
设置所需的=%5
echo%所需%>..\test.dat
设置/a“版本=%desired%-%head%”
echo%version%>..\version.dat
git签出@{%version%}
echo%所需%>..\BUILD\u NUMBER.dat
echo%所需%>..\build\build\u NUMBER.dat
..\HEAD.dat的内容是正确的,但是没有其他内容是正确的

  • ..\test.dat从未创建过(我不太关心它,因为它只是一个测试)
  • ..\BUILD\u NUMBER.dat和..\BUILD\BUILD\u NUMBER.dat具有回声之前的值
  • ..\version.dat包含%所需%包含的内容
  • git回购协议的签出版本是当前的头,而不是所需的版本

基本上,我要做的是从git中签出一个特定的修订号,使用rev list--count来获得HEAD值,然后从所需的版本中减去该值来获得git checkout命令的负偏移量

对于git命令,您可以使用bash编写脚本,并使用
bash-c./yourScript.sh

确保在unix模式下编写shell脚本(在lf中结束行,而不是crlf)

您会发现,在bat脚本中尝试查找间接寻址在bash脚本中要容易得多:

#!/bin/bash

head=$(cat ../BUILD_NUMBER.dat)
...

当涉及到git命令时,您可以用bash编写脚本,并使用
bash-c./yourScript.sh

确保在unix模式下编写shell脚本(在lf中结束行,而不是crlf)

您会发现,在bat脚本中尝试查找间接寻址在bash脚本中要容易得多:

#!/bin/bash

head=$(cat ../BUILD_NUMBER.dat)
...

%5
引用批处理文件的第五个参数。是这样吗?是的,第五个参数是我要生成的修订号,例如:3826我想查看该代码的会话日志(启用
echo
)以准确查看发生了什么。你能把它编辑成问题吗?(只需运行它并复制/粘贴整个输出)我相信您已经过度裁剪了代码片段。您的投诉具有代码块(括号内的一系列行)中此代码的所有特征,您需要使用
延迟扩展
(许多文章-使用
搜索
)来访问更改后的值。@Stephan,我不太确定如何做,因为它不是从控制台运行的。它实际上是从另一个.bat文件调用的.bat文件,从php脚本调用,从另一个php页面上的ajax调用调用,因此echo on不会显示任何内容。
%5
引用批处理文件的第五个参数。是这样吗?是的,第五个参数是我要生成的修订号,例如:3826我想查看该代码的会话日志(启用
echo
)以准确查看发生了什么。你能把它编辑成问题吗?(只需运行它并复制/粘贴整个输出)我相信您已经过度裁剪了代码片段。您的投诉具有代码块(括号内的一系列行)中此代码的所有特征,您需要使用
延迟扩展
(许多文章-使用
搜索
)来访问更改后的值。@Stephan,我不太确定如何做,因为它不是从控制台运行的。它实际上是一个从另一个.bat文件调用的.bat文件,从一个php脚本调用,它是从另一个php页面上的ajax调用调用的,所以echo on不会显示任何内容。