Mr.*_*irl 3 windows parameters procedure function batch-file
我编写了一个脚本,其中包含一个函数,该函数应循环遍历列表并返回给定所述列表中项目索引的值.我有一个名为的函数::find
应该有2个参数:列表和项目位置.我不确定如何处理函数中的多个参数.该脚本如果我更换运行良好%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
Run Code Online (Sandbox Code Playgroud)
更新
我的脚本现在运行正常; 感谢nephi12.http://pastebin.com/xGdFWmnM
call :find "%MY_LIST%" %TARGET_INDEX%
goto :EOF
:find
echo %~1 %~2
goto :EOF
Run Code Online (Sandbox Code Playgroud)
它们与args一样传递给脚本...... ;)