问题是这样,现在一个文件夹内有较大量图片(大概一个文件夹内有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,同样需处理的文件,有的运行没反应,有的却可以,不知道是什么原因。麻烦大家帮忙看看,谢谢大家。
能力水平有限,想到的这个思路可能不是最完美的,或许有更好的解决办法,能提供的话在此不胜感激。 |