Board logo

标题: [文件操作] 【已解决】批处理如何根据文件夹关键词分类图片 [打印本页]

作者: 小吴    时间: 2022-4-9 15:28     标题: 【已解决】批处理如何根据文件夹关键词分类图片

本帖最后由 小吴 于 2022-4-10 20:27 编辑

做图
  -套装
           --778
           --779
           --776
  -睡裙
          --888
          --999
          --881
-778主图1.jpg
-779主图1.jpg
-776主图1.jpg
-888主图1.jpg
-999主图1.jpg
-881主图1.jpg



效果
做图
      -套装
           --778
                 ---778主图1.jpg
           --779
                 ---779主图1.jpg
           --776
                 ---776主图1.jpg
     -睡裙
          --888
                 ---888主图1.jpg
          --999
                 ---999主图1.jpg
          --881
                 ---881主图1.jpg
谢谢老师
作者: Batcher    时间: 2022-4-9 16:37

回复 1# 小吴


请使用下面的 tree 命令生成真实的目录结构然后发出来看看
tree /f "D:\你自己的真实路径\做图" > 1.txt

如需上传截图,请用图床:
http://bbs.bathome.net/thread-60985-1-1.html

如需上传附件,请用阿里云盘或百度网盘。
作者: 小吴    时间: 2022-4-9 17:01

回复 2# Batcher


    图片链接:http://qr61.cn/oaCdYX/qYNG7ob
作者: Batcher    时间: 2022-4-9 17:08

回复 3# 小吴


    你这个截图跟顶楼的描述完全不一样啊。比如“501竖图”应该移动到哪里去?规律是啥?
作者: 小吴    时间: 2022-4-9 21:55

回复 4# Batcher


   
做图(一级文件夹)
  -套装(二级文件夹)
           --778(三级文件夹)
           --779(三级文件夹)
           --776(三级文件夹)
  -睡裙
          --888(三级文件夹)
          --999(三级文件夹)
          --881(三级文件夹)
-778主图1.jpg(二级文件)
-779主图1.jpg(二级文件)
-776主图1.jpg(二级文件)
-888主图1.jpg(二级文件)
-999主图1.jpg(二级文件)
-881主图1.jpg(二级文件)



效果
做图(一级文件)
      -套装(二级文件)
           --778(三级文件)
                 ---778主图1.jpg
           --779(三级文件)
                 ---779主图1.jpg
           --776(三级文件)
                 ---776主图1.jpg
     -睡裙(二级文件)
          --888(三级文件)
                 ---888主图1.jpg
          --999(三级文件)
                 ---999主图1.jpg
          --881(三级文件)
                 ---881主图1.jpg

把二级文件夹的*.jpg的文件按照文件名称移动到相应的三级文件夹里面
作者: Batcher    时间: 2022-4-9 22:37

回复 5# 小吴


请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
  1. @echo off
  2. cd /d "%~dp0"
  3. for /f "delims=" %%i in ('dir /b /ad') do (
  4.     echo 正在处理二级文件夹:%%i
  5.     pushd "%%i"
  6.     for /f "delims=" %%j in ('dir /b /ad') do (
  7.         echo 三级文件夹:%%j
  8.         move "*%%j*.jpg" "%%j"
  9.     )
  10.     popd
  11. )
复制代码

作者: qixiaobin0715    时间: 2022-4-10 08:42

回复 6# Batcher
pushd "%%i"后,第5行代码是否应当修改为:
  1. move "..\*%%j*.jpg" "%%j"
复制代码

作者: qixiaobin0715    时间: 2022-4-10 09:00

我觉得还是不妥,如果图片中有一个是:873竖图.jpg,并且又存在若干8731竖图.jpg,8732竖图.jpg...等图片,就会有问题。
作者: Batcher    时间: 2022-4-10 09:16

回复 8# qixiaobin0715


    等等看楼主的测试结果吧,给的例子像是瞎编的,不知道真实数据的规律是怎样的
作者: qixiaobin0715    时间: 2022-4-10 09:37

是的,楼主提供的信息还是不典型。
借用Batcher代码我觉得可以这样:
  1. @echo off
  2. set KeyWords=主图 全景照片
  3. for %%a in (%KeyWords%) do (
  4.     for /f "delims=" %%i in ('dir /b /ad') do (
  5.         pushd "%%i"
  6.         for /f "delims=" %%j in ('dir /b /ad') do (
  7.             move "..\*%%j%%a*.jpg" "%%j"
  8.         )
  9.         popd
  10.     )
  11. )
复制代码
注意事项:
1.图片名称最好都是规则命名:数字+通用词汇(“xxx图”或“xxx照片”等)+xxx.jpg
2.如果一级文件夹下的图片名称中含有“主图、竖图、全景照片”等多个通用词汇,请自行修改代码第2行变量值,各通用词汇之间用空格分开。如果只有一个通用词汇,就只保留一个。
作者: qixiaobin0715    时间: 2022-4-10 09:55

本帖最后由 qixiaobin0715 于 2022-4-10 10:32 编辑

发上去了就感觉上面代码还是有问题,应当把最外层的for循环放在最内层好一些。
  1. @echo off
  2. set KeyWords=主图 全景照片
  3. for /f "delims=" %%i in ('dir /b /ad') do (
  4.     pushd "%%i"
  5.     for /f "delims=" %%j in ('dir /b /ad') do (
  6.         for %%a in (%KeyWords%) do move "..\%%j%%a*.jpg" "%%j">nul
  7.     )
  8.     popd
  9. )
  10. pause
复制代码

作者: 小吴    时间: 2022-4-10 13:07

回复 11# qixiaobin0715


    这个可以谢谢,
作者: 小吴    时间: 2022-4-10 13:08

回复 6# Batcher

好的,感谢




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