bat/cmd將命令執行的結果賦值給變量


比如我想把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%' ) 這里,括號中使用的是單引號,不是反引號

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM