打扰一下。我想就这个话题发表一些声明。
你没有指出你的“数组”来自哪里。您可以将其存储在变量中,例如:
set dirs=directoryA directoryB directoryC directoryD directoryE directoryF
但是,这不是一个数组,而是一个列表。您可以通过以下方式从子例程的参数创建此列表:
set dirs=%*
如果你想从这个列表中删除前三个元素,你可以这样做:
for /F "tokens=3*" %%a in ("%dirs%") do set dirs=%%b
另一种可能性是目录作为参数列表传递给子例程:
call :subroutine directoryA directoryB directoryC directoryD directoryE directoryF
我认为这是基于您的示例的情况。在这种情况下,很容易通过三个shift
命令“删除”前三个参数:
:subroutine
rem Remove first three parameters:
shift
shift
shift
rem Process the rest of parameters:
:nextParam
if "%1" equ "" goto endParams
echo Next param is: %1
shift
goto nextParam
:endParams
但是,如果您有一个“真实”数组(数字下标从 1 开始),也可以通过这种方式从子例程的参数列表中创建(就像在您的示例中一样):
set paramCount=0
for %%x in (%*) do (
set /A paramCount+=1
set "dirs[!paramCount!]=%%x"
)
然后您可以通过这种方式删除前三个元素:
for /L %%i in (4,1,%paramCount%) do (
set /A j=%%i-3
set dirs[!j!]=!dirs[%%i]!
)
set /A paramCount-=3