我目前正在處理一個應該從另一個檔案中讀取版本號的批處理檔案。
基本上,我只需要從另一個檔案中提取字串并從中獲取數字(數字隨時間變化)。
set dir=..\folder1\file1.vcxproj
:: I want to get a string from %dir% with a specific beginning and then extract the version number from it
set string=... ("<PlatformToolset>*")
set vernum=... ("..>v142<..)
這就是我想要實作的目標:
echo %string%
<PlatformToolset>v142</PlatformToolset>
echo %vernum%
142
我希望我能描述我的問題。不幸的是,我對 cmd 的經驗很少,我很難在這方面表達自己。
我希望有人仍然可以提供幫助:)
uj5u.com熱心網友回復:
dir對于變數來說這個名字很糟糕,有兩個原因。首先dir是批處理中的關鍵字,然后當它看起來是一個檔案時,它暗示它是一個目錄。
用于set "var1=value"設定STRING值 - 這可以避免尾隨空格引起的問題。設定算術值不需要引號 ( set /a)
所以假設你正在做的是從檔案中找到142的字串中提取(請更改該名稱)
<PlatformToolset>v142</PlatformToolset>dir
for /f "tokens=1,2delims=<> " %%b in ('type "%dir%"') do if "%%b"=="PlatformToolset" set "vernum=%%c"
set "vernum=%vernum:~1%"
請注意,位置和報價型別('或")至關重要。
讀取檔案的for每一行并分析該行,將第一個“令牌”(1)分配給%%b,將第二個(2)分配給%%c.
該行被視為
<delimiter sequence><token1><delimiter sequence><token2><delimiter sequence><token3><delimiter sequence><token4>
定界符序列是選項中指定的任何字符中的一個或多個delims=;在這種情況下<,>和Space
所以 - %%a(token 1)在哪里PlatformToolset,我們想將%%c(token 2) 分配給vernum
所以vernum將v142與包含您發布的測驗行的檔案一起使用。
set命令背后的象形文字由set /?提示符解釋 - 它取 in 中的值vernum,從“字符 1”開始(字符編號從0開始)并將結果分配給變數vernum
有關for體操的更多詳細資訊,請參閱for /?提示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/473717.html
上一篇:CMD到bash腳本轉換半欄
下一篇:特定型別的if陳述句的正確語法
