根据文件数将文件从文件夹移动到新文件夹

时间:2013-03-18 15:19:01

标签: batch-file automation directory

这可能是一个具体案例,但鉴于正确的代码,我相信很多人可以从中获取。

我在一个文件夹中有数千个文件需要拆分成多个文件夹。每个文件夹需要比之前的文件多1个文件,并且需要这样命名。每个文件夹至少需要X个文件。例如,如果每个文件夹必须至少有一个文件,那么最终结果可能是这样的:

U:\Batch\Original\ -->
    file1.xml
    file2.xml
    file3.xml
    file4.xml
    file5.xml
    file6.xml

U:\Batch\Processed\ -->
    folder1.1 -->
        file1.xml
    folder2.2 -->
        file2.xml
        file3.xml
    folder3.3 -->
        file4.xml
        file5.xml
        file6.xml

我已经开始attempting this on my own,但我觉得我离开了。假设我在每个文件夹中至少需要1000个文件。如何在.bat程序中执行此操作?

2 个答案:

答案 0 :(得分:1)

你走了。这应该处理它。

@echo off
setlocal enabledelayedexpansion
set /a "minimum=1000, outer=minimum, inner=1"
set folder_prefix=folder
call :mkfolder

:: dir list, order by name, exclude directories, exclude this batch script
for /f "delims=" %%I in ('dir /b /o:n /a:-d ^| findstr /v "%~nx0"') do (
    if !inner! GTR !outer! (
        set /a "inner=1, outer+=1"
        call :mkfolder
    )
    copy "%%I" "!folder!" >NUL
    set /a "inner+=1"
)

:: rename final directory to reflect the number of files contained within
for /f "delims=" %%I in ("%folder%") do set "to=%%~dpnI"
set /a "inner-=1"
ren "%folder%" "%to%.%inner%"


goto :EOF

:mkfolder
set folder=%folder_prefix%!outer!.!outer!
if not exist "!folder!" mkdir "!folder!"
goto :EOF

答案 1 :(得分:1)

你走在正确的轨道上。为了演示,首先我们需要创建一些文件来使用:

md c:\y
cd /d c:\y
for %i in (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30) do echo.>%i.txt

现在我们可以从c:\y运行以下批处理文件来创建子文件夹并按照您的指示复制文件(但在此示例中将3作为最小文件):

@echo off

setlocal EnableDelayedExpansion

set cnt=1
set fldr=1
set min=3

for %%i in (*.txt) do (
  if !cnt! GTR !min! (
    set /a cnt-=1
    ren folder!fldr! folder!fldr!.!cnt!
    set cnt=1
    set /a fldr+=1
    set /a min+=1
  )

  md folder!fldr! > nul 2>&1

  copy "%%i" folder!fldr!

  set /a cnt+=1
)

set /a cnt-=1
ren folder!fldr! folder!fldr!.!cnt!