Board logo

标题: [文件操作] 【已解决】BAT代码怎么写,批量放置每4张图片到顺序文件夹? [打印本页]

作者: wqj    时间: 2023-12-10 00:38     标题: 【已解决】BAT代码怎么写,批量放置每4张图片到顺序文件夹?

本帖最后由 wqj 于 2024-1-1 18:28 编辑

批量放置每2张图片到顺序文件夹。
作者: Batcher    时间: 2023-12-10 09:43

回复 1# wqj


请给一个真实的例子说明一下你的需求吧,比如操作之前是怎样的,操作之后变成啥样?
如果需要上传文件,请用使用网盘。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: wqj    时间: 2023-12-10 09:58

本帖最后由 wqj 于 2023-12-10 10:00 编辑

需要的功能是,将bat所在目录(不含子文件夹)的 图片 ,按顺序依次一张或多张(自定义)的复制到所在目录的文件夹。 图片 格式是常见的格式:jpg,jpeg,png,bmp。

比如当前目录下有10个文件夹,20张 图片 :
1
2
3
4
5
6
7
8
9
10
。。。文件夹有10个文件夹
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
。。。。。20张图片顺序为1-20


想要的结果是:
如果设置每个文件夹移动进去2张 图片 ,那么结果是,按名称的进行排序的命名
1-2.jpg复制进1文件夹
3-4.jpg复制进2文件夹
5-6.jpg复制进3文件夹
作者: wqj    时间: 2023-12-10 10:01

@echo off

set "AvgNum=2"

cd /d "%~dp0"

setlocal enabledelayedexpansion

for /f "delims=" %%i in ('dir /b /a-d ^| findstr /e /c:".jpg" /c:".jpeg" /c:".png" /c:".bmp"') do (
set fn=%%~ni
set /a "FolderCount=(!fn:~1!-1)/AvgNum+1"

if not exist "!FolderCount!" (
md "!FolderCount!"

)

move /y "%%i" "!FolderCount!\"
)
作者: wqj    时间: 2023-12-10 10:05

如何才能再实现设置每个文件夹移动进去2张 图片 ,那么结果是,按名称的进行逆序的命名
1-2.jpg复制进10文件夹
3-4.jpg复制进9文件夹
5-6.jpg复制进8文件夹
7-8.jpg复制进7文件夹
9-10.jpg复制进6文件夹
作者: wqj    时间: 2023-12-10 10:14

本帖最后由 wqj 于 2023-12-10 10:28 编辑

1
2
3
4
5
6
7
8
9
10
。。。文件夹有10个文件夹
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
6.jpg
7.jpg
8.jpg
9.jpg
10.jpg
11.jpg
12.jpg
14.jpg
15.jpg
17.jpg
18.jpg
19.jpg
22.jpg
23.jpg
24.jpg
图片顺序不连续,仍按顺序不变每2张图片放1个文件夹。求大神帮忙看看。
作者: wqj    时间: 2023-12-10 10:28

[img][/img]
作者: ShowCode    时间: 2023-12-10 11:02

回复 6# wqj


图片顺序不连续V1.bat
  1. @echo off
  2. cd /d "%~dp0"
  3. setlocal enabledelayedexpansion
  4. set "MaxNum=2"
  5. for /l %%i in (1,1,10) do (
  6.     md "%%i" 2>nul
  7.     set "FileNum=0"
  8.     for /l %%j in (1,1,100) do (
  9.         if !FileNum! lss !MaxNum! (
  10.             if exist "%%j.jpg" (
  11.                 move "%%j.jpg" "%%i\"
  12.                 set /a FileNum+=1
  13.             ) else if exist "%%j.jpeg" (
  14.                 move "%%j.jpeg" "%%i\"
  15.                 set /a FileNum+=1
  16.             ) else if exist "%%j.png" (
  17.                 move "%%j.png" "%%i\"
  18.                 set /a FileNum+=1
  19.             ) else if exist "%%j.bmp" (
  20.                 move "%%j.bmp" "%%i\"
  21.                 set /a FileNum+=1
  22.             )
  23.         )
  24.     )
  25. )
复制代码

作者: ShowCode    时间: 2023-12-10 11:06

回复 6# wqj


图片顺序不连续V2.bat
  1. @echo off
  2. cd /d "%~dp0"
  3. setlocal enabledelayedexpansion
  4. set "MaxNum=2"
  5. for /l %%i in (1,1,10) do (
  6.     call :HandleFolder %%i
  7. )
  8. :HandleFolder
  9. md "%1" 2>nul
  10. set "FileNum=0"
  11. for /l %%j in (1,1,100) do (
  12.     if !FileNum! lss !MaxNum! (
  13.         if exist "%%j.jpg" (
  14.             move "%%j.jpg" "%1\"
  15.             set /a FileNum+=1
  16.         ) else if exist "%%j.jpeg" (
  17.             move "%%j.jpeg" "%1\"
  18.             set /a FileNum+=1
  19.         ) else if exist "%%j.png" (
  20.             move "%%j.png" "%1\"
  21.             set /a FileNum+=1
  22.         ) else if exist "%%j.bmp" (
  23.             move "%%j.bmp" "%1\"
  24.             set /a FileNum+=1
  25.         )
  26.     ) else (
  27.         goto :eof
  28.     )
  29. )
复制代码

作者: wqj    时间: 2023-12-10 12:59

回复 9# ShowCode


    感谢帮助,完美实现!
弱弱的再问一下?文件名换成这样,代码怎么修改!
新 (1).jpg
新 (2).jpg
新 (3).jpg
新 (4).jpg
新 (5).jpg
新 (6).jpg
新 (7).jpg
新 (8).jpg
新 (9).jpg
新 (10).jpg

作者: ShowCode    时间: 2023-12-10 13:11

回复 10# wqj


图片顺序不连续V1.1.bat
  1. @echo off
  2. cd /d "%~dp0"
  3. setlocal enabledelayedexpansion
  4. set "MaxNum=2"
  5. for /l %%i in (1,1,10) do (
  6.     md "%%i" 2>nul
  7.     set "FileNum=0"
  8.     for /l %%j in (1,1,100) do (
  9.         if !FileNum! lss !MaxNum! (
  10.             if exist "新 (%%j).jpg" (
  11.                 move "新 (%%j).jpg" "%%i\"
  12.                 set /a FileNum+=1
  13.             ) else if exist "新 (%%j).jpeg" (
  14.                 move "新 (%%j).jpeg" "%%i\"
  15.                 set /a FileNum+=1
  16.             ) else if exist "新 (%%j).png" (
  17.                 move "新 (%%j).png" "%%i\"
  18.                 set /a FileNum+=1
  19.             ) else if exist "新 (%%j).bmp" (
  20.                 move "新 (%%j).bmp" "%%i\"
  21.                 set /a FileNum+=1
  22.             )
  23.         )
  24.     )
  25. )
复制代码

作者: wqj    时间: 2023-12-10 13:32

回复 11# ShowCode

抱歉,我搞错了,是文件夹名改成这样怎么修改。再帮帮忙,万分感谢!
新建(1)-
新建 (2)-
新建 (3)-
新建(4)-
新建 (5)-
新建 (6)-
新建 (7)-
新建 (8)-
新建 (9)-
新建 (10)-
作者: ShowCode    时间: 2023-12-10 14:26

回复 12# wqj


图片顺序不连续V1.2.bat
  1. @echo off
  2. cd /d "%~dp0"
  3. setlocal enabledelayedexpansion
  4. set "MaxNum=2"
  5. for /l %%i in (1,1,10) do (
  6.     md "新建 (%%i)" 2>nul
  7.     set "FileNum=0"
  8.     for /l %%j in (1,1,100) do (
  9.         if !FileNum! lss !MaxNum! (
  10.             if exist "%%j.jpg" (
  11.                 move "%%j.jpg" "新建 (%%i)\"
  12.                 set /a FileNum+=1
  13.             ) else if exist "%%j.jpeg" (
  14.                 move "%%j.jpeg" "新建 (%%i)\"
  15.                 set /a FileNum+=1
  16.             ) else if exist "%%j.png" (
  17.                 move "%%j.png" "新建 (%%i)\"
  18.                 set /a FileNum+=1
  19.             ) else if exist "%%j.bmp" (
  20.                 move "%%j.bmp" "新建 (%%i)\"
  21.                 set /a FileNum+=1
  22.             )
  23.         )
  24.     )
  25. )
复制代码

作者: wqj    时间: 2023-12-10 18:28

如上代码每个文件夹移动进去2张 图片 ,怎样实现逆序放入文件夹?
1-2.jpg复制进文件夹10
3-4.jpg复制进文件夹9
5-6.jpg复制进文件夹8
7-8.jpg复制进文件夹7
9-10.jpg复制进文件夹6
作者: ShowCode    时间: 2023-12-10 18:35

回复 14# wqj


图片顺序不连续V1.3.bat
  1. @echo off
  2. cd /d "%~dp0"
  3. setlocal enabledelayedexpansion
  4. set "MaxNum=2"
  5. for /l %%i in (10,-1,1) do (
  6.     md "新建 (%%i)" 2>nul
  7.     set "FileNum=0"
  8.     for /l %%j in (1,1,100) do (
  9.         if !FileNum! lss !MaxNum! (
  10.             if exist "%%j.jpg" (
  11.                 move "%%j.jpg" "新建 (%%i)\"
  12.                 set /a FileNum+=1
  13.             ) else if exist "%%j.jpeg" (
  14.                 move "%%j.jpeg" "新建 (%%i)\"
  15.                 set /a FileNum+=1
  16.             ) else if exist "%%j.png" (
  17.                 move "%%j.png" "新建 (%%i)\"
  18.                 set /a FileNum+=1
  19.             ) else if exist "%%j.bmp" (
  20.                 move "%%j.bmp" "新建 (%%i)\"
  21.                 set /a FileNum+=1
  22.             )
  23.         )
  24.     )
  25. )
复制代码

作者: wqj    时间: 2023-12-10 20:48

已解决,感谢大神帮助!
作者: wqj    时间: 2023-12-10 21:36

回复 15# ShowCode


    拜谢大神!
作者: wqj    时间: 2023-12-12 09:17

本帖最后由 wqj 于 2023-12-12 10:07 编辑

回复 11# ShowCode


    大神麻烦再请教一下?文件名换成这样,您写的代码怎么修改!
新0001.jpg
新0002.jpg
新0003.jpg
新0004.jpg
新0025.jpg
新0029.jpg
新0058.jpg
新0112.jpg
新0113.jpg
新0116.jpg
文件名始终保留4位数字
@echo off
cd /d "%~dp0"
setlocal enabledelayedexpansion
set "MaxNum=2"
for /l %%i in (1,1,10) do (
    md "%%i" 2>nul
    set "FileNum=0"
    for /l %%j in (1,1,100) do (
        if !FileNum! lss !MaxNum! (
            if exist "新 (%%j).jpg" (
                move "新 (%%j).jpg" "%%i\"
                set /a FileNum+=1
            ) else if exist "新 (%%j).jpeg" (
                move "新 (%%j).jpeg" "%%i\"
                set /a FileNum+=1
            ) else if exist "新 (%%j).png" (
                move "新 (%%j).png" "%%i\"
                set /a FileNum+=1
            ) else if exist "新 (%%j).bmp" (
                move "新 (%%j).bmp" "%%i\"
                set /a FileNum+=1
            )
        )
    )
)
作者: ShowCode    时间: 2023-12-12 09:40

回复 18# wqj


    请按照2楼的步骤操作
作者: wqj    时间: 2023-12-12 10:09

回复 9# ShowCode


       大神麻烦再请教一下?文件名换成这样,您写的代码怎么修改!
新0001.jpg
新0002.jpg
新0003.jpg
新0004.jpg
新0025.jpg
新0029.jpg
新0058.jpg
新0112.jpg
新0113.jpg
新0116.jpg
文件名始终保留4位数字
@echo off
cd /d "%~dp0"
setlocal enabledelayedexpansion
set "MaxNum=2"
for /l %%i in (1,1,10) do (
    md "%%i" 2>nul
    set "FileNum=0"
    for /l %%j in (1,1,100) do (
        if !FileNum! lss !MaxNum! (
            if exist "新 (%%j).jpg" (
                move "新 (%%j).jpg" "%%i\"
                set /a FileNum+=1
            ) else if exist "新 (%%j).jpeg" (
                move "新 (%%j).jpeg" "%%i\"
                set /a FileNum+=1
            ) else if exist "新 (%%j).png" (
                move "新 (%%j).png" "%%i\"
                set /a FileNum+=1
            ) else if exist "新 (%%j).bmp" (
                move "新 (%%j).bmp" "%%i\"
                set /a FileNum+=1
            )
        )
    )
)
作者: ShowCode    时间: 2023-12-12 10:23

回复 20# wqj


我写的代码不需要你重复的发出来。因为这对于我理解你的需求没有任何帮助。
我只需要知道需求是怎样。哪里的文件名换成这样?移动之前还是移动之后?
文字加截图描述清楚你的需求就够了。
具体步骤请看2楼。
作者: wqj    时间: 2023-12-12 10:42

本帖最后由 wqj 于 2023-12-12 10:44 编辑

回复 20# wqj


    将类似于代码中这样的文件名 "新 (%%j).jpg"更换成下面这样
新0001.jpg
新0002.jpg
新0003.jpg
新0004.jpg
新0025.jpg
新0029.jpg
新0058.jpg
新0112.jpg
新0113.jpg
最小的文件名编号 新0001.jpg   最大的文件名编号 新0999.jpg   共上千张图片,每两个放一个文件夹,怎么在文件名序号前加0不会修改,没表述清楚,抱歉!
作者: wqj    时间: 2023-12-12 10:45

回复 21# ShowCode


  将类似于代码中这样的文件名 "新 (%%j).jpg"更换成下面这样
新0001.jpg
新0002.jpg
新0003.jpg
新0004.jpg
新0025.jpg
新0029.jpg
新0058.jpg
新0112.jpg
新0113.jpg
最小的文件名编号 新0001.jpg   最大的文件名编号 新0999.jpg   共上千张图片,每两个放一个文件夹,怎么在文件名序号前加0不会修改,没表述清楚,抱歉!
作者: ShowCode    时间: 2023-12-12 11:15

回复 23# wqj
  1. @echo off
  2. cd /d "%~dp0"
  3. setlocal enabledelayedexpansion
  4. set "MaxNum=2"
  5. for /l %%i in (1,1,10) do (
  6.     md "%%i" 2>nul
  7.     set "FileNum=0"
  8.     for /l %%j in (10001,1,10999) do (
  9.         set "FileSeq=%%j"
  10.         set "FileSeq=!FileSeq:~-4!"
  11.         if !FileNum! lss !MaxNum! (
  12.             if exist "新!FileSeq!.jpg" (
  13.                 move "新!FileSeq!.jpg" "%%i\"
  14.                 set /a FileNum+=1
  15.             ) else if exist "新!FileSeq!.jpeg" (
  16.                 move "新!FileSeq!.jpeg" "%%i\"
  17.                 set /a FileNum+=1
  18.             ) else if exist "新!FileSeq!.png" (
  19.                 move "新!FileSeq!.png" "%%i\"
  20.                 set /a FileNum+=1
  21.             ) else if exist "新!FileSeq!.bmp" (
  22.                 move "新!FileSeq!.bmp" "%%i\"
  23.                 set /a FileNum+=1
  24.             )
  25.         )
  26.     )
  27. )
复制代码

作者: wqj    时间: 2023-12-12 12:43

回复 24# ShowCode


    完美实现,对大神五体投地拜谢!
作者: wqj    时间: 2024-3-19 20:11

回复 24# ShowCode


    大神,上述代码,如果文件夹已经存在,怎么修改代码? 拜谢!
作者: ShowCode    时间: 2024-3-20 21:54

回复 26# wqj


    哪个文件夹已经存在?那种情况下24楼的代码结果和你希望的结果有什么差异?
作者: wqj    时间: 2024-3-21 13:22

本帖最后由 wqj 于 2024-3-21 13:57 编辑

回复 26# wqj
作者: wqj    时间: 2024-3-21 13:56

回复 27# ShowCode


    大神! 24楼的代码,如果不用新建文件夹,就是文件夹已经存在,仍然两张照片放一个文件夹,怎么修改代码? 拜谢!
作者: qixiaobin0715    时间: 2024-3-21 16:15

回复 29# wqj
表述不清楚,要靠猜。是这样吗:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-d *.jpg') do (
  4.     set /a m+=1
  5.     set /a "n=(m-1)/2+1"
  6.     move "%%i" "!n!\"
  7. )
  8. pause
复制代码

作者: wqj    时间: 2024-3-21 20:07

本帖最后由 wqj 于 2024-3-21 20:12 编辑

回复 30# qixiaobin0715

求教大神!文件夹名换成这样,代码怎么修改,每个文件夹名称的最后四位数字是固定的
(1)-4567
(2)-0235
(3)-3362
(4)-5578
(5)-6590

move "%%i" "!n!\" 这行代码怎么修改? 拜托大神!
作者: qixiaobin0715    时间: 2024-3-22 09:26

不是你想象的那样,只是修改move "%%i" "!n!\",代码需推翻重来。
所以需要一次性把问题说清楚,发现你都是说一半留一半。给想帮你的人带来多余的无用功。
作者: wqj    时间: 2024-3-22 12:37

本帖最后由 wqj 于 2024-3-22 12:39 编辑

回复 32# qixiaobin0715


   
抱歉,没有表述清楚,求大神帮忙!拜谢!
每个文件夹移动进去2张 图片 ,如:
1-2.jpg移动进文件夹1-××××
3-4.jpg移动进文件夹2-××××
5-6.jpg移动进文件夹3-××××
7-8.jpg移动进文件夹4-××××
9-10.jpg移动进文件夹5-××××
类似200张图片,每2张放入一个文件夹,文件夹编号-后都有4位数字
作者: 77七    时间: 2024-3-22 14:42

回复 33# wqj


  
(1)-4567
(2)-0235
1-2.jpg移动进文件夹1-××××


为什么隔了一楼文件夹名称格式就变了
翻看前贴
新0001.jpg
新0002.jpg


文件名格式也变了吗?
建议发个新贴子,完整描述下需求。
作者: qixiaobin0715    时间: 2024-3-22 15:04

本帖最后由 qixiaobin0715 于 2024-3-22 15:11 编辑

回复 33# wqj
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1-2 delims=-" %%i in ('dir /b /ad *-*') do (
  4.     set /a n=%%i*2
  5.     if exist "!n!.jpg" move "!n!.jpg" "%%i-%%j\"
  6.     set /a n-=1
  7.     if exist "!n!.jpg" move "!n!.jpg" "%%i-%%j\"
  8. )
  9. pause
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2