【问题标题】:batch script to move n files exch time用于移动 n 个文件交换时间的批处理脚本
【发布时间】:2013-02-17 04:31:22
【问题描述】:

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

【问题讨论】:

  • 你使用的是什么平台?

标签: batch-file


【解决方案1】:

我不太确定你需要什么。

  • 您是否打算分 N 个批次处理每个文件,直到没有文件剩余?
  • 或者您打算只处理每个目录的前 N ​​个文件,而忽略其余所有文件?

场景一:每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
    )
)

【讨论】:

  • /L 可能不起作用,因为我们需要 /R 来复制所有子目录。要求是从每个子目录复制/移动 5/n 个文件。
  • @Raj - 我不确定你在问什么。我用几个示例脚本更新了我的答案。两者都满足你的需要吗?
  • 我会试试这个。情况是我有一个包含视频的目录,我会将其复制到临时目录并进行处理。有时我有 20-30 个文件需要很长时间才能在 dir 上完成 for 循环。相反,我想复制一批(n 个),处理并将它们复制到另一台服务器。我不想使用 robocopy 移动所有文件,而是使用 for 循环将前 'n' 个文件从该目录移动到进程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 2013-11-17
相关资源
最近更新 更多