比如我想把git代碼的commitid獲取以后加到文件夾上來標記文件夾中的包是哪個git 節點構建得到的。
git 命令是git rev-parse --short HEAD
在linux系統下,只需要執行下面的命令:
commitid=`git rev-parse --short HEAD`
echo commitid=$commitid
但是在windows系統下,卻不能直接使用反引號,要使用for變通下,命令如下:
for /F %%i in ('git rev-parse --short HEAD') do ( set commitid=%%i)
echo commitid=%commitid%
執行結果如下:
我的任務參數設置如下圖:
最后我的文件夾的名字就可以達到下面的效果了:
此外,還有如果我們要findstr 某個字符串來確定是否包含的時候,我遇到了這個報錯:“此時不應有 |。”
是因為|是特殊字符,需要轉義,不然會報錯,比如我們要過濾tag中是否有tag_r10001,正確的:
setlocal ENABLEDELAYEDEXPANSION
set b_tag=tag_r10001
for /F %%j in ( 'git tag ^| findstr %b_tag%' ) do ( set tag_flag=%%j )
echo tag_flag=!tag_flag!
::如果這個tag存在,則切換到tag,如果不存在,提示tag錯誤,並顯示已有tag,然后異常退出
if not "!tag_flag!" == "" (
echo "checkouting %b_tag% ....."
git checkout %b_tag%
)else (
echo "your input tag is not exist and exit ,all tag as follow:"
git tag
exit 1
)
上面這段表示,首先findstr過濾tag_r10001的結果給tag_flag,如果tag_flag為空,表示tag不存在,出錯退出,如果存在,切換到對應tag。
其中,我在調試階段:set tag_flag以后,使用echo tag_flag=%tag_flag%,怎么都不能輸出正確的結果,值都是空的,哪怕tag是存在的,
這里要說一下“延遲環境變量擴展”,通過setlocal ENABLEDELAYEDEXPANSION 設置參考:https://blog.csdn.net/kolamemo/article/details/18036021
注意:for /F %%j in ( 'git tag ^| findstr %b_tag%' ) 這里,括號中使用的是單引號,不是反引號