すみません。このトピックについていくつかの宣言を述べたいと思います。
「配列」がどこから来たのかを示していません。たとえば、次のように変数に格納できます。
set dirs=directoryA directoryB directoryC directoryD directoryE directoryF
ただし、これは配列ではなくリストです。このリストは、サブルーチンのパラメーターから次のように作成できます。
set dirs=%*
このリストから最初の 3 つの要素を削除するには、次のようにします。
for /F "tokens=3*" %%a in ("%dirs%") do set dirs=%%b
もう 1 つの可能性は、ディレクトリがパラメータ リストとしてサブルーチンに渡されたことです。
call :subroutine directoryA directoryB directoryC directoryD directoryE directoryF
あなたの例に基づいて、これが当てはまると思います。この場合、次の 3 つのshift
コマンドを使用して、最初の 3 つのパラメーターを簡単に「削除」できます。
: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"
)
次に、次の方法で最初の 3 つの要素を削除できます。
for /L %%i in (4,1,%paramCount%) do (
set /A j=%%i-3
set dirs[!j!]=!dirs[%%i]!
)
set /A paramCount-=3