bat/cmd将命令执行的结果赋值给变量
比如我想把git代碼的commitid獲取以后加到文件夾上來標(biāo)記文件夾中的包是哪個git 節(jié)點構(gòu)建得到的。
git 命令是git rev-parse --short HEAD
再linux系統(tǒng)下,只需要執(zhí)行下面的命令:
commitid=`git rev-parse --short HEAD`?
echo commitid=$commitid
?
但是在windows系統(tǒng)下,卻不能直接使用反引號,要使用for變通下,命令如下:
for /F %%i in ('git rev-parse --short HEAD') do ( set commitid=%%i)
echo commitid=%commitid%
?
執(zhí)行結(jié)果如下:
我的任務(wù)參數(shù)設(shè)置如下圖:
?
最后我的文件夾的名字就可以達(dá)到下面的效果了:
?此外,還有如果我們要findstr 某個字符串來確定是否包含的時候,我遇到了這個報錯:“此時不應(yīng)有 |。”
是因為|是特殊字符,需要轉(zhuǎn)義,不然會報錯,比如我們要過濾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
)
上面這段表示,首先finstr過濾tag_r10001的結(jié)果給tag_flag,如果tag_flag為空,表示tag不存在,出錯退出,如果存在,切換到對應(yīng)tag。
其中,我在調(diào)試階段:set tag_flag以后,使用echo tag_flag=%tag_flag%,怎么都不能輸出正確的結(jié)果,值都是空的,哪怕tag是存在的,
這里要說一下“延遲環(huán)境變量擴(kuò)展”,通過setlocal ENABLEDELAYEDEXPANSION 設(shè)置參考:https://blog.csdn.net/kolamemo/article/details/18036021
注意:for /F %%j in ( 'git tag ^| findstr %b_tag%' ) 這里,括號中使用的是單引號,不是反引號
總結(jié)
以上是生活随笔為你收集整理的bat/cmd将命令执行的结果赋值给变量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: -Bsymbolic:优先使用本地符号
- 下一篇: Javasc中发出HTTP请求最常用的方