首页 > 解决方案 > 将文件以五个为一组移动到文件夹中?

问题描述

假设我有 50 个按名称排序的文件。我想创建一个批处理脚本,它给我以下结果:

Files 1 through 5 -> 01-05
Files 6 through 10 -> 06-10

等等..我怎样才能创建一个批处理脚本来实现这一点?请注意,01-05 和 06-10 是目录名称。

编辑:详细信息

例如。考虑一下:

  • 源目录:
    • 101.mp4
    • 102.mp4
    • 103.mp4
    • 104.mp4

等等..

我想要一个这样的目录结构:

  • 目的地目录:
  • 101-105:

    • 101.mp4
    • 102.mp4
    • 103.mp4
    • 104.mp4
    • 105.mp4
  • 106-110:

    • 106.mp4
    • 107.mp4
    • 108.mp4
    • 109.mp4
    • 110.mp4

等等..

标签: windowsbatch-file

解决方案


这是您想要的,更改fileCount以更改每个子目录中的文件号:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set fileCount=5
set filesNow=0
set nameStart=000
set nameEnd=000
FOR /F "usebackq delims=" %%i IN (`dir /b /O:N *.mp4`) do (
    set /a filesNow+=1
    set /a tmpValue=filesNow %% fileCount
    ::echo !filesNow!
    ::echo !fileCount!
    ::echo %%i
    ::echo !tmpValue!
    if "!tmpValue!"=="1" (
        set "nameStart=%%~ni"
        mkdir _tmpDir_
    )
    move %%~nxi _tmpDir_\
    if "!tmpValue!"=="0" (
        rename _tmpDir_ !nameStart!-%%~ni
    )
    set "nameEnd=%%~ni"
)

if exist _tmpDir_ rename _tmpDir_ %nameStart%-%nameEnd%

您需要将它们放在 bat/cmd 文件中才能工作。
filesNow用于文件编号计数。
基本上它是创建一个 tmp 文件夹并在其中移动文件,
当其中的文件达到数量时,更改文件夹的名称。
几个测试echo命令我没有去掉,只是用来::注释掉的,你可以去掉::重新测试。


推荐阅读