标题: [文件操作] [已解决]批处理把图片重命名并move到二级目录下然后删除三级目录 [打印本页]
作者: wpy4206 时间: 2017-12-15 16:00 标题: [已解决]批处理把图片重命名并move到二级目录下然后删除三级目录
求助:三级目录内的图片重命名(用三级目录文件夹名称,添加序号)并move到二级目录下,然后删除三级目录
实例:
D:\123\JC001\SSS,下有图片若干,名称无规律
D:\123\JC002\SSS,下有图片若干,名称无规律
D:\123\JC003\SSS,下有图片若干,名称无规律
......
处理后
D:\123\JC001 目录内:SSS(1).JPG,,SSS(2).JPG,,SSS(3).JPG.....
D:\123\JC002 目录内:SSS(1).JPG,,SSS(2).JPG,,SSS(3).JPG.....
D:\123\JC003 目录内:SSS(1).JPG,,SSS(2).JPG,,SSS(3).JPG.....
......
说明:二级目录下,D:\123\JC001,原有的图片不变(名称和路径都不变)
感谢两位的热心帮助!
作者: WHY 时间: 2017-12-15 20:06
本帖最后由 WHY 于 2017-12-15 20:42 编辑
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /a-d /s D:\123\*.jpg ^| findstr /i "D:\\123\\[^\\]*\\[^\\]*\\[^\\]*$"') do (
- if not "!s!" == "%%~dpi" (
- set n=1
- if defined s echo; rd /s /q "!s!"
- ) else (set /a n+=1)
- for %%j in ("%%~dpi.") do echo;move "%%i" "%%~fj(!n!)%%~xi"
- set "s=%%~dpi"
- )
- if defined s echo; rd /s /q "!s!"
- pause
复制代码
作者: wpy4206 时间: 2017-12-15 20:29
回复 2# WHY
代码有点复杂,没看懂,我测试了,分别放在一级目录下,二级目录下,都提示找不到文件。
作者: WHY 时间: 2017-12-15 20:47
D:\123
改成你的真实的目录名,D:\\123也改成真实的目录名(注意是双斜杠)
作者: wpy4206 时间: 2017-12-15 22:01
回复 4# WHY
我的目录就是D盘下,123文件夹(一级目录)啊
作者: WHY 时间: 2017-12-16 00:10
Microsoft Windows [版本 10.0.16299.64]
(c) 2017 Microsoft Corporation。保留所有权利。
C:\Users\WHY>dir /b /a-d /s D:\123\*.jpg
D:\123\img110.jpg
D:\123\JC001\sss\105.jpg
D:\123\JC001\sss\106.jpg
D:\123\JC001\sss\107.jpg
D:\123\JC002\img110 - 副本.jpg
D:\123\JC002\sss\345720170221013.jpg
D:\123\JC002\sss\567820170421010.jpg
D:\123\JC003\img101.jpg
D:\123\JC003\abc\img109 - 副本.jpg
D:\123\JC003\abc\img110 - 副本.jpg
C:\Users\WHY>E:\Test\Test.bat
move "D:\123\JC001\sss\105.jpg" "D:\123\JC001\sss(1).jpg"
move "D:\123\JC001\sss\106.jpg" "D:\123\JC001\sss(2).jpg"
move "D:\123\JC001\sss\107.jpg" "D:\123\JC001\sss(3).jpg"
rd /s /q "D:\123\JC001\sss\"
move "D:\123\JC002\sss\345720170221013.jpg" "D:\123\JC002\sss(1).jpg"
move "D:\123\JC002\sss\567820170421010.jpg" "D:\123\JC002\sss(2).jpg"
rd /s /q "D:\123\JC002\sss\"
move "D:\123\JC003\abc\img109 - 副本.jpg" "D:\123\JC003\abc(1).jpg"
move "D:\123\JC003\abc\img110 - 副本.jpg" "D:\123\JC003\abc(2).jpg"
rd /s /q "D:\123\JC003\abc\"
请按任意键继续. . .
我这里没有问题。
作者: wpy4206 时间: 2017-12-16 09:31
回复 6# WHY
运行和你显示的是一样,但是文件都没有变化呢
作者: wpy4206 时间: 2017-12-16 17:15
求大神看下二楼的跟帖,我测试了不行啊
作者: ivor 时间: 2017-12-16 20:45
本帖最后由 ivor 于 2017-12-17 12:53 编辑
回复 1# wpy4206
powershell 脚本:
功能:以当前文件为基准,只移动深度三层目录下所有JPG图片至二层目录,然后删除空目录- foreach ($dir in @(dir .\*\*\*))
- {
- $count = 0
- foreach ($file in @(dir $dir))
- {
- if ($file.Extension -eq ".jpg"){
- if (! $file.PSIsContainer){
- if ($dir.Parent){
- $count += 1
- $new_file = -Join($dir.name,"(",$count,")",$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
- }
- }
- }
- }
- }
- }
复制代码
作者: WHY 时间: 2017-12-16 23:39
回复 7# wpy4206
你应该知道 echo; 的作用吧?把它删掉好了。
作者: wpy4206 时间: 2017-12-17 16:09
回复 10# WHY
感谢你的耐心恢复,删掉结果一样没有变化,还是运行显示的有
作者: wpy4206 时间: 2017-12-17 16:09
回复 9# ivor
测试了没有反应,是另存bat运行吗
作者: ivor 时间: 2017-12-17 16:40
本帖最后由 ivor 于 2017-12-17 16:53 编辑
回复 12# wpy4206
好吧,现在可以存为bat文件运行此代码了。- <# :
- @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 += 1
- $new_file = -Join($dir.name,"(",$count,")",$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
- }
- }
- }
- }
- }
- }
复制代码
作者: wpy4206 时间: 2017-12-17 17:05
回复 13# ivor
测试成功,非常感谢
作者: WHY 时间: 2017-12-17 21:33
本帖最后由 WHY 于 2017-12-17 23:24 编辑
- $arr = dir D:\123\*\*\*.jpg | ?{$_ -is [IO.FileInfo]};
- $arr | ForEach{
- If($fd -ne $_.Directory.FullName){
- $n = 0;
- If(Test-Path Variable:fd){rd -LiteralPath $fd -Recurse -Force}
- }
- $fd = $_.Directory.FullName;
- mv -LiteralPath $_.FullName -Des ($fd + '(' + (++$n) + ').jpg') -Force;
- }
- If(Test-Path Variable:fd){rd -LiteralPath $fd -Recurse -Force}
复制代码
作者: 1127483222 时间: 2023-1-4 21:09
回复 13# ivor
这个放在那个文件夹下
作者: wpy4206 时间: 2023-2-23 09:31
回复 13# ivor
Set ExecutionPolicy :对注 册表项“HKEY LOCAL MACHINE\SOFTWARE Microsoft PowerShell \1ShellIds \Microsoft.PowerShel1“的
访问被拒绝。要更改默认(Loca lMachine)作用域的执行策略,请使用“以管理员身份运行”选项启动Windows PowerShell。要更改当
前用户的执行策略,请运行“Set-Execut ionPolicy scope CurrentUser”。
所在位置行:1字符: 1
Set-Execut ionPolicy -ExecutionPolicy RemoteSigned
分类信息
允许离子被拒绝:([Set-Execut ionPolicy], unauthor izedAccessExcept ion
+ 完全限定错误 ID:系统。Unauthori zedAccessExcept ion, Mi crosoft.电源谢尔 1.命令。Se tExecutionPoli cyComma ,
德·
无法访间C:\Users\吴\Desktop\新建文件夹-副本\-文件
系统找不到指定的文件。
请按任意键继续.
右键管理员运行,就是找不到指定的文件,是怎么回事啊
作者: qixiaobin0715 时间: 2023-2-23 10:17
- @echo off
- for /d %%i in (*) do (
- pushd "%%i"
- for /d %%j in (*) do (
- pushd "%%j"
- setlocal enabledelayedexpansion
- for %%k in (*.JPG) do (
- set /a n+=1
- move "%%k" "..\%%j(!n!).JPG"
- )
- endlocal
- popd
- rd "%%j"
- )
- popd
- )
- pause
复制代码
未测试,注意备份好源文件,批处理放在D:\123目录下运行
作者: wpy4206 时间: 2023-2-23 18:02
回复 18# qixiaobin0715
测试过了,图片从3级目录移到了2级目录,数字开头的文件夹没有删除掉,还要麻烦大佬优化一下,另外,能不能把图片换成文件,就是3级目录下的所有文件全部移到2级目录下,这样不管是什么格式的图片都能出来。
作者: qixiaobin0715 时间: 2023-2-24 08:12
回复 19# wpy4206
代码第7行“*.JPG”修改为“*”试试。
作者: wpy4206 时间: 2023-2-27 14:36
本帖最后由 wpy4206 于 2023-2-27 14:43 编辑
回复 18# qixiaobin0715
作者: qixiaobin0715 时间: 2023-2-27 15:01
请注意是否会有重名文件,如果有会覆盖:- @echo off
- for /d %%i in (*) do (
- pushd "%%i"
- for /d %%j in (*) do (
- pushd "%%j"
- move /y "*.*" "..\"
- popd
- rd "%%j"
- )
- popd
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |