2

複数のファイル ディレクトリを含むバッチ ファイルに配列があります。配列の最初の 3 つの要素を削除し、すべてをシフト オーバーしたいと考えています (つまり、4 番目の要素が最初の要素に置き換わり、5 番目の要素が 2 番目の要素に置き換わり、6 番目の要素が 3 番目の要素に置き換わる、など)。これはバッチ スクリプトで実行できるものですか?

例:

[directoryA, directoryB, directoryC, directoryD, directoryE, directoryF]

は次のように変更されます。

[directoryD, directoryE, directoryF]

「配列」のコードは次のとおりです。

set paramCount=0
for %%x in (%*) do (
  set /A paramCount+=1
  set "dirs[!paramCount!]=%%x"
)
4

2 に答える 2

2

すみません。このトピックについていくつかの宣言を述べたいと思います。

「配列」がどこから来たのを示していません。たとえば、次のように変数に格納できます。

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
于 2013-11-15T03:52:50.730 に答える