标题: [文件操作] [已解决]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
未测试:- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1,2* delims=_" %%a in ('dir /b /a-d *.jpg *.mp4') do (
- set "str=%%b"
- set "str=!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
复制代码
作者: 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
- @echo off
- set Letters=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /a-d *.jpg *.mp4') do (
- for /f "delims=%Letters%" %%a in ("%%i") do (
- set "str=%%a"
- set "str=!str:~,4!\!str:~,4!.!str:~4,2!\!str:~,4!.!str:~4,2!.!str:~-2!"
- if not exist "!str!" md "!str!"
- move "%%i" "!str!"
- )
- )
- 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楼代码,未测试:- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1,2* delims=_" %%a in ('dir /b /a-d *.jpg *.mp4') do (
- set str=%%a
- set /a str=str
- if not "!str!"=="%%a" set str=%%b
- set "str=!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
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |