[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]批处理把图片重命名并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,原有的图片不变(名称和路径都不变)


感谢两位的热心帮助!
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

请注意是否会有重名文件,如果有会覆盖:
  1. @echo off
  2. for /d %%i in (*) do (
  3.     pushd "%%i"
  4.     for /d %%j in (*) do (
  5.         pushd "%%j"
  6.         move /y "*.*" "..\"
  7.         popd
  8.         rd "%%j"
  9.     )
  10.     popd
  11. )
  12. pause
复制代码

TOP

本帖最后由 wpy4206 于 2023-2-27 14:43 编辑

回复 18# qixiaobin0715

TOP

回复 19# wpy4206
代码第7行“*.JPG”修改为“*”试试。

TOP

回复 18# qixiaobin0715


    测试过了,图片从3级目录移到了2级目录,数字开头的文件夹没有删除掉,还要麻烦大佬优化一下,另外,能不能把图片换成文件,就是3级目录下的所有文件全部移到2级目录下,这样不管是什么格式的图片都能出来。

TOP

  1. @echo off
  2. for /d %%i in (*) do (
  3.     pushd "%%i"
  4.     for /d %%j in (*) do (
  5.         pushd "%%j"
  6.         setlocal enabledelayedexpansion
  7.         for %%k in (*.JPG) do (
  8.             set /a n+=1
  9.             move "%%k" "..\%%j(!n!).JPG"
  10.         )
  11.         endlocal
  12.         popd
  13.         rd "%%j"
  14.     )
  15.     popd
  16. )
  17. pause
复制代码
未测试,注意备份好源文件,批处理放在D:\123目录下运行
1

评分人数

    • wpy4206: 感谢给帖子标题标注[已解决]字样技术 + 1

TOP

回复 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\新建文件夹-副本\-文件
系统找不到指定的文件。
请按任意键继续.




右键管理员运行,就是找不到指定的文件,是怎么回事啊

TOP

回复 13# ivor


    这个放在那个文件夹下

TOP

本帖最后由 WHY 于 2017-12-17 23:24 编辑
  1. $arr = dir D:\123\*\*\*.jpg | ?{$_ -is [IO.FileInfo]};
  2. $arr | ForEach{
  3.     If($fd -ne $_.Directory.FullName){
  4.         $n = 0;
  5.         If(Test-Path Variable:fd){rd -LiteralPath $fd -Recurse -Force}
  6.     }
  7.     $fd = $_.Directory.FullName;
  8.     mv -LiteralPath $_.FullName -Des ($fd + '(' + (++$n) + ').jpg') -Force;
  9. }
  10. If(Test-Path Variable:fd){rd -LiteralPath $fd -Recurse -Force}
复制代码
1

评分人数

    • wpy4206: 感谢给帖子标题标注[已解决]字样技术 + 1

TOP

回复 13# ivor


    测试成功,非常感谢

TOP

本帖最后由 ivor 于 2017-12-17 16:53 编辑

回复 12# wpy4206

好吧,现在可以存为bat文件运行此代码了。
  1. <# :
  2. @echo off
  3. rem 增强代码兼容性,代码保存为 ".bat"、".cmd"、".ps1"均可执行
  4. powershell Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
  5. more +8 %~f0 > %~dpn0.ps1
  6. powershell %~dpn0.ps1
  7. del %~dpn0.ps1&pause&exit /b
  8. #>
  9. foreach ($dir in @(dir .\*\*\*))
  10. {
  11.     $count = 0
  12.     foreach ($file in @(dir $dir))
  13.     {
  14.         if ($file.Extension -eq ".jpg"){
  15.             if (! $file.PSIsContainer){
  16.                 if ($dir.Parent){
  17.                     $count += 1
  18.                     $new_file = -Join($dir.name,"(",$count,")",$file.Extension)
  19.                     $dest = -Join(".\",$dir.Parent.Parent,"\",$dir.Parent,"\",$new_file)
  20.                     $file.Moveto($dest)
  21.                     write-host 正在移动:$file
  22.                     if( (Get-ChildItem $dir | Measure-Object).Count -eq 0) {
  23.                         rd $dir
  24.                         write-host 删除目录:$dir
  25.                     }
  26.                 }
  27.             }
  28.         }
  29.     }
  30. }
复制代码
1

评分人数

#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

回复 9# ivor


    测试了没有反应,是另存bat运行吗

TOP

回复 10# WHY


    感谢你的耐心恢复,删掉结果一样没有变化,还是运行显示的有

TOP

回复 7# wpy4206


    你应该知道 echo; 的作用吧?把它删掉好了。

TOP

本帖最后由 ivor 于 2017-12-17 12:53 编辑

回复 1# wpy4206
powershell 脚本:
功能:以当前文件为基准,只移动深度三层目录下所有JPG图片至二层目录,然后删除空目录
  1. foreach ($dir in @(dir .\*\*\*))
  2. {
  3.     $count = 0
  4.     foreach ($file in @(dir $dir))
  5.     {
  6.         if ($file.Extension -eq ".jpg"){
  7.             if (! $file.PSIsContainer){
  8.                 if ($dir.Parent){
  9.                     $count += 1
  10.                     $new_file = -Join($dir.name,"(",$count,")",$file.Extension)
  11.                     $dest = -Join(".\",$dir.Parent.Parent,"\",$dir.Parent,"\",$new_file)
  12.                     $file.Moveto($dest)
  13.                     write-host 正在移动:$file
  14.                     if( (Get-ChildItem $dir | Measure-Object).Count -eq 0) {
  15.                         rd $dir
  16.                         write-host 删除目录:$dir
  17.                     }
  18.                 }
  19.             }
  20.         }
  21.     }
  22. }
复制代码
1

评分人数

#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

返回列表