0

現在、temp_dir内のすべてのファイルをdirに移動してファイルを処理するスクリプトがあります。n個のファイルをまとめて移動して処理するように変更したいと思います。バッチスクリプトを介してそれを達成するための最良の方法は何でしょうか。

4

1 に答える 1

0

何が必要なのかよくわかりません。

  • ファイルがなくなるまで、すべてのファイルを N 個のバッチで処理するつもりですか?
  • それとも、ディレクトリごとに最初の N 個のファイルのみを処理し、残りをすべて無視するつもりですか?

シナリオ 1: N 個のバッチですべてのファイルを処理する

モジュロ演算を使用して、N ループごとに一時停止できます。モジュラスは、除算後の剰余を計算します。モジュラスが 0 の場合、分子は分母で均等に除算されます。それはこのように動作します:

0 % 3 = 0
1 % 3 = 1
2 % 3 = 2
3 % 3 = 0
4 % 3 = 1
5 % 3 = 2
6 % 3 = 0

等々。

%filesPerChunk%以下は、すべてのループ反復を一時停止するモジュロ演算を含むバッチ スクリプトの例です。これを拡張子をつけて保存して.bat試してみてください。

@echo off
setlocal enabledelayedexpansion

set /a "filesPerChunk=5, idx=0"

for /F "delims=" %%I in ('dir /s /b') do (
    echo Processing %%I

    set /a "idx+=1"
    set /a "mod=idx %% filesPerChunk"

    if !mod! equ 0 (
        echo --- END OF CHUNK ---
        pause
    )

)

シナリオ 2: すべてのディレクトリの最初の N 個のファイルのみを処理する

これは、ファイルが検出されるたびにインクリメントされ、新しいディレクトリが検出されると 0 にリセットされる単純なカウンターで実行できます。

@echo off
setlocal enabledelayedexpansion

set filesPerChunk=5

for /F "delims=" %%I in ('dir /s /b') do (

    if "!dir!"=="%%~dpI" (
        set /a "idx+=1"
    ) else (
        if defined dir echo ---
        set idx=0
        set "dir=%%~dpI"
    )

    if !idx! lss %filesPerChunk% (
        echo Processing %%I
    )
)
于 2013-02-17T04:55:42.973 に答える