從我最初的問題來自 @aschipfl 的代碼。我的目標是遍歷.ini檔案,提取特定部分的鍵和值,并使用提取的資訊來呼叫命令。config.ini我要迭代的檔案如下所示:
[Branches]
trunk=path_to_trunk
k21.1.0.Patch=path_to_k21.1.0.Patch
k21.2.0.Test=path_to_k21.2.0.Test
[Unimportant section]
......
我目前正在config.ini像aschipfl在我之前的問題中建議的那樣迭代檔案。看看他的回答,看看細節。
順便說一句,如果有人能向我解釋存盤資訊的變數在哪里初始化以及我可以在哪里使用它們,我會非常高興。
無論如何,因為我現在應該有我需要的資訊,即使我不知道確切的位置,我想根據提取的資訊運行命令。
我想運行的命令是一個tortoise命令,它在使用絕對引數時作業正常,但是當我想將變數作為引數傳遞時會出現奇怪的錯誤訊息:
svn log PATH_TO_BRANCH -v --xml --username xxxxxx --password "xxxxxx" > BRANCH.xml
正如你可以在上面看到config.ini檔案中,變數PATH_TO_BRANCH是原始值的變數BRANCH,在這種情況下將是關鍵。請注意,變數在 achipfl 的建議中命名不同。
如果有人能在這里幫助我或對我有任何建議,我將如何解決我的問題,我會很高興。
輸出
首先,我$%%I在初始化后拆分變數,因為它$%%I包含鍵/值對。之后我呼叫命令:
for /f "tokens=1*" %%a in ("$%%I") do (
set "branch=%%a"
set "path=%%b"
cmd /c svn log %path% -v --xml --username xxxxxx --password "xxxxxx" > %branch%.xml
)
運行后,我收到此錯誤:
svn: E205000: Try 'svn help log' for more information svn:
E205000: 'extensions' option requires 'diff' option
正如我之前所說,如果我使用純文本而不是變數作為引數,則不會出現此錯誤。該命令svn help log僅提供有關該命令用法的資訊。未創建 XML 檔案。
uj5u.com熱心網友回復:
根據您的示例,您破壞了系統%path%變數。切勿使用系統變數,因為這會導致本地會話出現問題:
此實體不需要設定任何變數,因為您可以使用元變數:
@echo off
for /F "delims=:" %%N in ('findstr /I /N /C:"[items]" "config.ini"') do set "SKIP=%%N"
for /F "usebackq tokens=1,* skip=%SKIP% delims==" %%I in ("config.ini") do (
if "%%J" == "" exit /b
svn log "%%J" -v --xml --username "xxxxxx" --password "xxxxxx" > "%%I.xml"
)
如果你真的必須設定變數,那么:
@echo off
setlocal enabledelayedexpansion
for /F "delims=:" %%N in ('findstr /I /N /C:"[items]" "config.ini"') do set "SKIP=%%N"
for /F "usebackq tokens=1,* skip=%SKIP% delims==" %%I in ("config.ini") do (
set "branch=%%I"
set "svnpath=%%J"
if "%%J" == "" exit /b
svn log "!svnpath!" -v --xml --username "xxxxxx" --password "xxxxxx" > "!branch!.xml"
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/312616.html
上一篇:從python呼叫批處理命令
