自动将一定数量的图片移动到CMD中的相应特定文件夹中

时间:2014-06-18 08:01:41

标签: loops batch-file

我抬起头来......

现在我有一个包含空子文件夹和图片的文件夹。

这些图片被随机命名为相机生成的默认名称。

如果我想将这些图片分成几批,然后将它们移动到子文件夹

例如:

总而言之,我总共有100张图片和5个子文件夹。

前20张图片进入subfolder_1

后续25张图片进入子文件夹_2

后续23张图片进入subfolder_3

后续12张图片进入subfolder_4

最后剩余的20张图片进入subfolder_5

所以,我想在循环中做这件事。由于图片数量不恒定,我打算提示用户每次定义要移动的图片数量。

我无法弄清楚的主要问题是如何控制完成的数量?

我知道使用GOTO函数来破坏FOR循环。但我不知道如何在我的情况下这样做。

事实上,我现在仍然坚持我现在拥有的这个概念,我试图使用更短的FOR循环来包含更长的FOR循环:

(这只是尝试将前20张图片放入子文件夹_1)

FOR / L %% A in(1,1,20)Do(

FOR %% B in("%dir_of_folder_which_contains_the_pictures_and_subfolders%\ *")Do(

MOVE * .jpg subfolder_1

这些代码不起作用。也许它必须使用GOTO功能?有人可以帮忙吗?感谢很多..

2 个答案:

答案 0 :(得分:0)

@echo off

    setlocal enableextensions enabledelayedexpansion

    set "folder=%cd%"

    rem For each of the present subfolders
    for /d %%a in ("%folder%\*") do (

        rem Count the number of remaining files
        set "nFiles=0"
        for /f %%b in ('dir "%folder%\*" /a-d /b 2^>nul ^| find /c /v ""') do set "nFiles=%%b"
        if !nFiles! lss 1 goto :done

        rem Ask the number of files to move
        echo(
        echo(There are !nFiles! files left. How many to move to %%a ?
        set "nFiles=0"
        set /p "nFiles="
        set /a "nFiles+=0" 2>nul

        rem Move the indicated number of files
        if !nFiles! gtr 0 for %%c in ("%folder%\*") do if defined nFiles (
            echo move "%%~fc" "%%~fa" 
            set /a "nFiles-=1"
            if !nFiles! equ 0 set "nFiles="
        )
    )

:done
    endlocal
    exit /b

不是最有效的代码,但这是构建的基本框架。 move命令以echo为前缀进行测试。如果输出到控制台是正确的,请删除echo

答案 1 :(得分:0)

使用数据结构(如数组或列表)可以更好地解决这类问题。例如:

@echo off
setlocal EnableDelayedExpansion

rem Initialize counters
set /A numFolders=0, numFiles=0

rem Save file names in an array
for %%a in (*.*) do (
   set /A numFiles+=1
   set "file[!numFiles!]=%%a"
)

rem Save folder names in a list
set "list="
for /D %%a in (*) do (
   set /A numFolders+=1
   set "list=!list! %%a"
)

rem Ask the user for the distribution
:askDistribution
echo There are %numFiles% files and %numFolders% folders
echo Enter the number of files for each folder (must sum %numFiles%)
echo Folders: %list%
set /P "distribution=Files:    "
set total=0
for %%a in (%distribution%) do set /A total+=%%a
if %total% neq %numFiles% goto askDistribution

rem Distribute the files
set i=0
for %%n in (%distribution%) do (
   rem Get current folder and shift the rest
   for /F "tokens=1*" %%a in ("!list!") do (
      set folder=%%a
      set list=%%b
   )
   rem Move the files
   for /L %%i in (1,1,%%n) do (
      set /A i+=1
      for /F %%i in ("!i!") do ECHO move "!file[%%i]!" !folder!
   )
)

有关详细信息,请参阅:Arrays, linked lists and other data structures in cmd.exe (batch) script