Board logo

标题: [文件操作] [已解决]Bat文件提取指定文字创建文件夹并移动文件到文件夹? [打印本页]

作者: bdk3521    时间: 2021-10-6 23:30     标题: [已解决]Bat文件提取指定文字创建文件夹并移动文件到文件夹?

本帖最后由 bdk3521 于 2021-10-9 18:16 编辑

平时需要批量处理很多照片、视频之类的,自己都是手工的来移动文件到指定文件夹,寻求一段Bat代码,可以实现以下的功能:
1、文件格式都是比较固定,一般都是IMG_20211005_****.JPG/MP4之类的,主要是想提取中间带日期的那一部分;
2、想创建的文件夹格式为 2021/2021.03/2021.03.05 类似这种的(PS.之所以这么创建文件夹,是想在最终三级文件夹也可以找到具体日期);
3、把文件(包含照片、视频)按照创建的日期转移至所在的文件夹;
作者: qixiaobin0715    时间: 2021-10-7 18:45

回复 1# bdk3521
未测试:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,2* delims=_" %%a in ('dir /b /a-d *.jpg *.mp4') do (
  4.     set "str=%%b"
  5.     set "str=!str:~,4!\!str:~,4!.!str:~4,2!\!str:~,4!.!str:~4,2!.!str:~-2!"
  6.     if not exist "!str!" md "!str!"
  7.     move "%%a_%%b_%%c" "!str!"
  8. )
  9. pause
复制代码

作者: bdk3521    时间: 2021-10-9 10:29

测试了,不行,
作者: Batcher    时间: 2021-10-9 11:39

回复 3# bdk3521


建议以后不要再说“不行”、“一闪而过”、“没有反应”之类的话,因为这对于想要给你进一步帮助的人来说没有任何意义。希望大家都能学会的一个知识点是:如何查看代码的报错信息。

如果你在执行.bat脚本,请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ

如果你在执行.ps1脚本,请参考:
http://bbs.bathome.net/thread-31071-1-1.html
作者: Batcher    时间: 2021-10-9 11:49

回复 3# bdk3521


我用以下两个文件测试2楼代码没有问题:
IMG_20211005_1.JPG
IMG_20211005_2.MP4

请把你测试使用的jpg和mp4文件名以及BAT脚本报错信息发出来看看
作者: bdk3521    时间: 2021-10-9 16:11

感谢楼上管理员的热心回复,我上午测试完一直在找原因,对于回复内容接收管理员批评,测试结果如下:
1、对于日期在中间的文件测试是成功的;
2、对于日期在开始的文件,截取的是中间img的范围
看了一下代码,应该是选取范围的设置问题,对代码不是很熟悉,不知道如何修改,补充一下问题:

样式1:VID_20210827_173406.mp4 这样格式的文件,经过测试是可以成功进行分类的,非常感谢。√

样式2:20150610_IMG_3573.JPG 命名为这样的文件,代码应该修改哪里? ×

可否把代码做个解读,告知如何修改?
再次感谢!
作者: bdk3521    时间: 2021-10-9 16:19

我自己解读的,哪里不正确请指点:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2* delims=_" %%a in ('dir /b /a-d *.jpg *.mp4') do (    问题:for循环懂,后缀懂,但是中间的tokens=1,2* delims=_" %%a in ('dir /b /a-d 不懂
    set "str=%%b"                                                                                  赋值?
    set "str=!str:~,4!\!str:~,4!.!str:~4,2!\!str:~,4!.!str:~4,2!.!str:~-2!" !str:~,4!\!str:~,4!.!str:~4,2!\!str:~,4!.!str:~4,2!.!str:~-2! 这个应该如何解读?
    if not exist "!str!" md "!str!"                                                               如果不存在文件夹,就创建一个   
    move "%%a_%%b_%%c" "!str!"                                                      移动文件至文件夹
)
pause
作者: idwma    时间: 2021-10-9 16:30

回复 7# bdk3521


    手动运行试试就明白怎么回事了
set "str=20210827"
echo %str:~,4%\%str:~,4%.%str:~4,2%\%str:~,4%.%str:~4,2%.%str:~-2%
作者: qixiaobin0715    时间: 2021-10-9 16:45

  1. @echo off
  2. set Letters=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /b /a-d *.jpg *.mp4') do (
  5.     for /f "delims=%Letters%" %%a in ("%%i") do (
  6.         set "str=%%a"
  7.         set "str=!str:~,4!\!str:~,4!.!str:~4,2!\!str:~,4!.!str:~4,2!.!str:~-2!"
  8.         if not exist "!str!" md "!str!"
  9.         move "%%i" "!str!"
  10.     )
  11. )
  12. pause
复制代码

作者: Batcher    时间: 2021-10-9 16:51

回复 7# bdk3521


推荐阅读:批处理for命令教程
http://bbs.bathome.net/thread-31727-1-1.html

批处理for命令从入门到精通以及配套练习题
http://bbs.bathome.net/thread-2189-1-1.html
http://bbs.bathome.net/thread-2336-1-1.html

字符串截取请参考set命令教程第8页
http://bbs.bathome.net/thread-31727-1-1.html
作者: bdk3521    时间: 2021-10-9 17:35

收到,感谢各位大佬。
作者: bdk3521    时间: 2021-10-9 18:14

回复 9# qixiaobin0715


    测试了,非常完美,感谢大佬
作者: qixiaobin0715    时间: 2021-10-9 18:42

本帖最后由 qixiaobin0715 于 2021-10-11 15:05 编辑

回复 12# bdk3521
也可用比较另类的方法修改2楼代码,未测试:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,2* delims=_" %%a in ('dir /b /a-d *.jpg *.mp4') do (
  4.     set str=%%a
  5.     set /a str=str
  6.     if not "!str!"=="%%a" set str=%%b
  7.     set "str=!str:~,4!\!str:~,4!.!str:~4,2!\!str:~,4!.!str:~4,2!.!str:~-2!"
  8.     if not exist "!str!" md "!str!"
  9.     move "%%a_%%b_%%c" "!str!"
  10. )
  11. pause
复制代码





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