我已經編寫了一個腳本,其中包含一個函數,該函數應循環顯示列表並返回給定列表中項目索引的值。我有一個叫做::find
的函數,它應該有兩個參數:列表和項目位置。我不確定如何處理函數中的多個參數。這個腳本運行良好,如果我在循環內替換%LIST%
和%MY_LIST%
,並從參數列表中刪除%MY_LIST%
tht傳遞給call :find
,但我真的想知道如何傳遞多個參數。我認爲,他們只是傳遞給函數整個字符串...批處理腳本傳遞多個參數來呼叫
@echo off
setlocal enableDelayedExpansion
cls
:: ----------------------------------------------------------
:: Variable declarations
:: ----------------------------------------------------------
set RETURN=-1
set MY_LIST=("foo" "bar" "baz")
set TARGET_INDEX=1
:: ----------------------------------------------------------
:: Main procedure
:: ----------------------------------------------------------
call :log "Finding item %TARGET_INDEX%..."
call :find %MY_LIST% %TARGET_INDEX%
call :log "The value is: %RETURN%"
goto Exit
:: ----------------------------------------------------------
:: Function declarations
:: ----------------------------------------------------------
:find
call :log "Called `:find` with params: [%*]"
set /a i=0
set LIST=%~1 & shift
for %%a in %LIST% do (
if !i! == %~1 (
set RETURN=%%a
)
set /a i=!i!+1
)
goto:EOF
:printDate
for /f "tokens=2-4 delims=/ " %%a in ('echo %DATE%') do (
set mydate=%%c/%%a/%%b)
for /f "tokens=1-3 delims=/:./ " %%a in ('echo %TIME%') do (
set mytime=%%a:%%b:%%c)
echo|set /p="[%mydate% %mytime%] "
goto:EOF
:log
call :printDate
echo %~1
goto:EOF
:: ----------------------------------------------------------
:: End of script
:: ----------------------------------------------------------
:Exit
更新
我的腳本現在能正常工作;感謝nephi12。 http://pastebin.com/xGdFWmnM
工作。謝謝,但你知道它爲什麼有效嗎?另外,這裏是我的工作腳本! http://pastebin.com/xGdFWmnM –
「的傳遞作爲一個參數,引號和所有。在〜%〜1刪除報價,如果他們在那裏。 – nephi12
劇本看起來不錯!它很好地放在一起,並且高效 – nephi12