首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于移动n个文件的批处理脚本

用于移动n个文件的批处理脚本
EN

Stack Overflow用户
提问于 2013-02-17 04:31:22
回答 1查看 1.8K关注 0票数 0

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

EN

回答 1

Stack Overflow用户

发布于 2013-02-17 04:55:42

我不太确定你需要什么。

  • 您是否打算将每一个文件分批处理,直到没有文件为止?
  • 还是打算只处理每个目录下的第一个N个文件,而忽略所有其他文件?

场景1:按N个批次处理每个文件

您可以使用模块化操作来暂停每一个N个循环。一个模数计算除数后的余数。如果模数为0,则分子被分母平均除以。它的工作方式如下:

代码语言:javascript
运行
复制
0 % 3 = 0
1 % 3 = 1
2 % 3 = 2
3 % 3 = 0
4 % 3 = 1
5 % 3 = 2
6 % 3 = 0

诸若此类。

下面是一个带有模块化操作的批处理脚本示例,用于暂停每个%filesPerChunk%循环迭代。用一个.bat扩展保存它,然后尝试它。

代码语言:javascript
运行
复制
@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。

代码语言:javascript
运行
复制
@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
    )
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14917997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档