找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26573|回复: 6

[文件操作] 批处理把多个文件夹重名文件并合并,原来的文件夹还在

[复制链接]
发表于 2021-2-10 10:52:16 | 显示全部楼层 |阅读模式
我用群晖收集文件,收集完后,每个人都有一个文件夹,每个文件夹下有文件。
现在需要,将文件用文件夹的名字命名,然后再合并到一个文件夹。
在网上找到了,现在还有问题,合并文件夹后,所有文件在一个叫“合并”文件里面。但是原来的文件夹和文件还在。如何删除原来的,只留“合并”这个文件夹
  1. @echo off
  2. rem 将多个子文件夹里的文件以其所在的文件夹名称重命名
  3. set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
  4. title %#% +%$%%$%/%@% %z%
  5. set "rootpath=%~dp0"
  6. cd /d "%rootpath%"
  7. powershell -NoProfile -ExecutionPolicy bypass ^
  8.     $folders=@(dir -liter '%rootpath%' -recurse^|?{$_ -is [System.IO.DirectoryInfo]});^
  9.     for($i=0;$i -lt $folders.length;$i++){^
  10.         $files=@(dir -liter $folders[$i].FullName^|?{$_ -is [System.IO.FileInfo]});^
  11.         for($j=0;$j -lt $files.length;$j++){^
  12.             $n=1;$f=$false;^
  13.             $newname=$folders[$i].Name+$files[$j].Extension;$newfile=$files[$j].Directory.FullName+'\'+$newname;^
  14.             while(test-path -liter $newfile){^
  15.                 if($files[$j].Name -eq $newname){$f=$true;break};^
  16.                 $newname=$folders[$i].Name+'_'+$n.toString()+$files[$j].Extension;$newfile=$files[$j].Directory.FullName+'\'+$newname;^
  17.                 $n++;^
  18.             };^
  19.             if($f){continue;};^
  20.             write-host ($files[$j].FullName+' --^> '+$newname);^
  21.             mv -liter $files[$j].FullName $newfile -force;^
  22.         };^
  23.     }
  24. echo;%#% +%$%%$%/%@% %z%
复制代码
  1. @echo off
  2. set dd=合并

  3. md "%dd%" 2>nul

  4. for /d %%a in (*)do if not "%%a"=="%dd%" (

  5. echo %%a

  6. for /r %%b in ("%%a\*")do (

  7. echo ... %%~nxb

  8. if exist "%dd%\%%~nxb" (

  9. set n=1&set "f=%%b"

  10. call :yky "%%~nb" "%%~xb"

  11. )else copy "%%b" "%dd%">nul

  12. )

  13. rd/s/q "%%b"

  14. )

  15. pause

  16. goto :eof
  17. :yky

  18. set/a n+=1

  19. if exist "%dd%\%~1_%n%%~2" goto :yky

  20. copy "%f%" "%dd%\%~1_%n%%~2">nul

  21. goto :eof
复制代码
发表于 2021-2-10 11:09:34 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2021-2-10 14:10 编辑

回复 1# pyj27
  1. @echo off
  2. md 合并
  3. for /d %%a in (*) do (
  4.     for %%b in ("%%a\*") do (
  5.         move "%%b" "合并\%%a%%~xb"
  6.     )
  7.     rd /s /q %%a
  8. )
  9. pause
复制代码
 楼主| 发表于 2021-2-10 13:03:50 | 显示全部楼层
回复 2# qixiaobin0715


    试了,不行。文件移动了,原文件没有了,但原文件夹还在。
发表于 2021-2-10 13:32:35 | 显示全部楼层
回复 3# pyj27


执行2楼代码之后,检查一下是否还有隐藏文件存在所以导致 rd 命令删不掉文件夹?例如:
  1. dir /b /s /a "C:\Test\原来的文件夹"
复制代码
发表于 2021-2-10 14:11:14 | 显示全部楼层
回复 3# pyj27
已修改
 楼主| 发表于 2021-2-10 17:17:55 | 显示全部楼层
回复 5# qixiaobin0715


    其实我不太懂,又找了一圈,在最后一个pause前加了一句
for /d %%a in (*)do (echo %合并%|findstr /i "\<%%a\>">nul||rd/s/q "%%a")
实现了我的目的。
但是执行完之后,窗口关闭 ,主目录不能删除了,被占用。
发表于 2021-2-11 06:26:01 | 显示全部楼层
回复 6# pyj27
2楼修改后的代码不行吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 20:32 , Processed in 0.027450 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表