用于将文件移动到尚不存在的文件夹的批处理文件

时间:2018-12-14 17:08:10

标签: batch-file

我有一个文件夹-PHOTOS,其结构如下:

image_001.png
image_002.png
image_003.png
image_004.png
image_005.png
image_006.png
image_007.png
and more.....

我想将PHOTOS文件夹中的前两个图像移动到一个子文件夹(例如:PHOTOS_SUB001)中,如果PHOTOS文件夹中的图像数目为3,则将所有剩余图像移动图片到最后一个子文件夹。

在我的示例中:

image_001image_002将移至PHOTOS_SUB001文件夹
image_003image_004将被移至PHOTOS_SUB002文件夹
image_005image_006image_007将被移至PHOTOS_SUB003文件夹

1 个答案:

答案 0 :(得分:0)

  • 获取要移动的文件总数,
  • 迭代文件并计数,
  • 计算其余部分并检查是否不均匀。

:: Q:\Test\2018\12\14\SO_53784108.cmd
@Echo off & SetLocal EnableDelayedExpansion
set "Base=A:\PHOTOS"
PushD "%Base%" || (Echo can't find Base:%Base% &Pause&Goto :Eof)

:: get Total files
For /f %%A in ('dir /B *.png ^|find /c ".png"') Do set "Total=%%%A"

Set Cnt=0
For /f "delims=" %%A in ('dir /B *.png') Do (
    Set /A "Cnt+=1,Rest=Total-Cnt+(Cnt%%2),DstNum=1000+(Cnt+1)/2"
    Set "Dest=%Base%\PHOTOS_SUB!DstNum:~-3!"
    MD "!Dest!" 2>Nul
    If !Rest! lss 2 (
        Move "%Base%\*.png" "!Dest!\" >Nul
        Goto :End
    ) else (
        Move "%%A" "!Dest!\" >Nul
    )
)
:End
PopD
Goto :Eof

运行批次后的样本树:

> Tree \ /F
└───PHOTOS
    ├───PHOTOS_SUB001
    │       image_001.png
    │       image_002.png
    │
    ├───PHOTOS_SUB002
    │       image_003.png
    │       image_004.png
    │
    └───PHOTOS_SUB003
            image_005.png
            image_006.png
            image_007.png