标题: [文件操作] 求助批处理进行图片整理归类的问题 [打印本页]
作者: liyu963926475 时间: 2020-11-30 10:02 标题: 求助批处理进行图片整理归类的问题
问题是这样,现在一个文件夹内有较大量图片(大概一个文件夹内有100-250张,图片格式为.jpg格式)
图片名称例:
0313-RS ·0010-0001-1-1-001.jpg
0313-RS ·0010-0001-1-2-001.jpg
0313-RS ·0010-0001-1-2-002.jpg
0313-RS ·0010-0001-3-1-001.jpg
0313-RS ·0010-0001-3-1-002.jpg
0313-RS ·0010-0001-3-2-001.jpg
0313-RS ·0010-0001-3-2-002.jpg
0313-RS ·0010-0001-9-1-1-001.jpg
0313-RS ·0010-0001-9-1-2-001.jpg
0313-RS ·0010-0001-9-1-3-001.jpg
0313-RS ·0010-0001-10-1-001.jpg
0313-RS ·0010-0001-10-2-001.jpg
现在需要在图片所在文件夹内创建新文件夹,并以图片名称的除过后四位的其他名称部分命名,
如:
0313-RS ·0010-0001-1-1-001.jpg 移动到 0313-RS ·0010-0001-1-1 文件夹内
0313-RS ·0010-0001-1-2-001.jpg 移动到 0313-RS ·0010-0001-1-2 文件夹内
0313-RS ·0010-0001-1-2-002.jpg 移动到 0313-RS ·0010-0001-1-2 文件夹内(和上一个为同一个文件夹)
0313-RS ·0010-0001-3-1-001.jpg 移动到 0313-RS ·0010-0001-3-1 文件夹内
0313-RS ·0010-0001-3-1-002.jpg 移动到 0313-RS ·0010-0001-3-1 文件夹内(和上一个为同一个文件夹)
0313-RS ·0010-0001-3-2-001.jpg 移动到 0313-RS ·0010-0001-3-2 文件夹内
0313-RS ·0010-0001-3-2-002.jpg 移动到 0313-RS ·0010-0001-3-2 文件夹内(和上一个为同一个文件夹)
0313-RS ·0010-0001-9-1-1-001.jpg 移动到 0313-RS ·0010-0001-9-1-1 文件夹内
0313-RS ·0010-0001-9-1-2-001.jpg 移动到 0313-RS ·0010-0001-9-1-2 文件夹内
0313-RS ·0010-0001-9-1-3-001.jpg 移动到 0313-RS ·0010-0001-9-1-3 文件夹内
0313-RS ·0010-0001-10-1-001.jpg 移动到 0313-RS ·0010-0001-10-1 文件夹内
0313-RS ·0010-0001-10-2-001.jpg 移动到 0313-RS ·0010-0001-10-2 文件夹内(和上一个为同一个文件夹)
例子举的比较多,但规律比较简单,
我在这里自学了两天(发现了宝藏论坛^_^),思路是这样:
先新建文件夹以每张照片名命名(有多少照片就建立多少文件夹),然后把每张照片分别移动到各相应的文件夹内:- @echo off&setlocal enabledelayedexpansion
- for /r %%i in (*)do if not exist "%%~ni" if not "%%i"==%0 md "%%~ni"&move "%%i" "%%~ni"
复制代码
再把需要放到一个文件夹的照片连同文件夹移动到同一个文件夹内:- @echo off&setlocal EnableDelayedExpansion
- for /d %%i in (*) do (set a=%%i
- set b=!a:~0,-4!
- move %%i !b!
- )
复制代码
再把调整文件夹内的照片,删掉多余的文件夹(网上抄大佬的,看不懂,不过能用,哈哈):- <# :
- @echo off
- rem 增强代码兼容性,代码保存为 ".bat"、".cmd"、".ps1"均可执行
- powershell Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
- more +8 %~f0 > %~dpn0.ps1
- powershell %~dpn0.ps1
- del %~dpn0.ps1&pause&exit /b
- #>
- foreach ($dir in @(dir .\*\*\*))
- {
- $count = 0
- foreach ($file in @(dir $dir))
- {
- if ($file.Extension -eq ".jpg"){
- if (! $file.PSIsContainer){
- if ($dir.Parent){
- $count += 0
- $new_file = -Join($dir.name,$file.Extension)
- $dest = -Join(".\",$dir.Parent.Parent,"\",$dir.Parent,"\",$new_file)
- $file.Moveto($dest)
- write-host 正在移动:$file
- if( (Get-ChildItem $dir | Measure-Object).Count -eq 0) {
- rd $dir
- write-host 删除目录:$dir
- }
- }
- }
- }
- }
- }
复制代码
到这这个文件夹内处理完了,手动再修改这个总文件夹名称为:
0313-RS ·0010-0001
这就处理完了一个。麻烦的是第一个代码和第二个代码是放进这个文件夹运行的,大佬给的这个是放到文件夹上一级运行的,虽然比纯手改要方便很多,但我还是想问下能不能用一个批处理指令一次完成这么多任务,最好是能一次运行完成多个,可以的话再使用批处理修改下总文件夹的名称。
还有个问题就是发现这三个代码或许有bug,同样需处理的文件,有的运行没反应,有的却可以,不知道是什么原因。麻烦大家帮忙看看,谢谢大家。
能力水平有限,想到的这个思路可能不是最完美的,或许有更好的解决办法,能提供的话在此不胜感激。
作者: Batcher 时间: 2020-11-30 10:09
回复 1# liyu963926475 - @echo off
- for /f "delims=" %%i in ('dir /b /a-d *.jpg') do (
- for /f "tokens=1-5 delims=-" %%a in ("%%~ni") do (
- if not exist "%%a-%%b-%%c-%%d-%%e" (
- md "%%a-%%b-%%c-%%d-%%e"
- )
- move "%%i" "%%a-%%b-%%c-%%d-%%e"
- )
- )
复制代码
作者: liyu963926475 时间: 2020-11-30 10:33
回复 2# Batcher
您好,大佬,您这短短几行就可以代替我三段代码,真是让我佩服的五体投地,就是还有点小小的问题。
例子内:
0313-RS ·0010-0001-9-1-1-001.jpg 移动到 0313-RS ·0010-0001-9-1-1 文件夹内
0313-RS ·0010-0001-9-1-2-001.jpg 移动到 0313-RS ·0010-0001-9-1-2 文件夹内
0313-RS ·0010-0001-9-1-3-001.jpg 移动到 0313-RS ·0010-0001-9-1-3 文件夹内
这些是分别放进三个文件夹的,而不是放进同一个文件夹。
而且最后的数字还有可能会有十位数的,如下:
0313-RS ·0010-0001-9-1-60-001.jpg 移动到 0313-RS ·0010-0001-9-1-60 文件夹内
作者: liyu963926475 时间: 2020-11-30 17:42
是太难了吗。。。有没有大佬愿意指教一下的呀。。感谢!!!
作者: WHY 时间: 2020-11-30 17:47
本帖最后由 WHY 于 2020-12-2 10:04 编辑
- PowerShell "dir *-*.jpg | forEach {$fd = $_.Name -replace '^(.+)-[^-]+$', '$1'; if(![IO.Directory]::Exists($fd)){$null=md $fd}; mv $_.FullName -dest $fd -Force}"
复制代码
作者: liyu963926475 时间: 2020-11-30 20:30
回复 5# WHY
这...一句都没看懂,但效果很好,看来我学习批处理还有很长一段路要走。感谢
作者: Batcher 时间: 2020-11-30 21:31
回复 6# liyu963926475
5楼是PowerShell脚本,如果感兴趣的话可以参考以下教程:
http://bbs.bathome.net/thread-26220-1-1.html
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |