批处理脚本移动n个文件exch时间

时间:2013-02-17 04:31:23

标签: batch-file

我目前有一个脚本可以将temp_dir中的所有文件移动到dir和处理文件。我想改变它来批量移动n个文件来处理它们。通过批处理脚本实现它的最佳方法是什么。

1 个答案:

答案 0 :(得分:0)

我不太确定你需要什么。

  • 您是否打算分批处理每个文件,直到没有文件保留?
  • 或者您打算只处理每个目录的前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
    )
)