Простите. Я хотел бы сказать несколько акров по этой теме.
У вас есть не указано , где ваш «массив». Вы можете хранить его в переменной, например:
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
, который представляет собой пакетный скрипт? DOS/WINDOWS? –
К сожалению, забыл упомянуть об этом. Я пишу базовый файл Windows .bat. Я только начинаю с пакетных скриптов, поэтому я не уверен, что это тот ответ, который вы ищете. – DerStrom8
Какую версию Windows вы используете? Windows 7? 8? МЕНЯ? –