Board logo

标题: [文件操作] 批处理把多个文件夹重名文件并合并,原来的文件夹还在 [打印本页]

作者: pyj27    时间: 2021-2-10 10:52     标题: 批处理把多个文件夹重名文件并合并,原来的文件夹还在

我用群晖收集文件,收集完后,每个人都有一个文件夹,每个文件夹下有文件。
现在需要,将文件用文件夹的名字命名,然后再合并到一个文件夹。
在网上找到了,现在还有问题,合并文件夹后,所有文件在一个叫“合并”文件里面。但是原来的文件夹和文件还在。如何删除原来的,只留“合并”这个文件夹
  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
复制代码

作者: qixiaobin0715    时间: 2021-2-10 11:09

本帖最后由 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
复制代码

作者: pyj27    时间: 2021-2-10 13:03

回复 2# qixiaobin0715


    试了,不行。文件移动了,原文件没有了,但原文件夹还在。
作者: Batcher    时间: 2021-2-10 13:32

回复 3# pyj27


执行2楼代码之后,检查一下是否还有隐藏文件存在所以导致 rd 命令删不掉文件夹?例如:
  1. dir /b /s /a "C:\Test\原来的文件夹"
复制代码

作者: qixiaobin0715    时间: 2021-2-10 14:11

回复 3# pyj27
已修改
作者: pyj27    时间: 2021-2-10 17:17

回复 5# qixiaobin0715


    其实我不太懂,又找了一圈,在最后一个pause前加了一句
for /d %%a in (*)do (echo %合并%|findstr /i "\<%%a\>">nul||rd/s/q "%%a")
实现了我的目的。
但是执行完之后,窗口关闭 ,主目录不能删除了,被占用。
作者: qixiaobin0715    时间: 2021-2-11 06:26

回复 6# pyj27
2楼修改后的代码不行吗?




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2