标题: [文件操作] 批处理把多个文件夹重名文件并合并,原来的文件夹还在 [打印本页]
作者: pyj27 时间: 2021-2-10 10:52 标题: 批处理把多个文件夹重名文件并合并,原来的文件夹还在
我用群晖收集文件,收集完后,每个人都有一个文件夹,每个文件夹下有文件。
现在需要,将文件用文件夹的名字命名,然后再合并到一个文件夹。
在网上找到了,现在还有问题,合并文件夹后,所有文件在一个叫“合并”文件里面。但是原来的文件夹和文件还在。如何删除原来的,只留“合并”这个文件夹- @echo off
- rem 将多个子文件夹里的文件以其所在的文件夹名称重命名
- set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
- title %#% +%$%%$%/%@% %z%
- set "rootpath=%~dp0"
- cd /d "%rootpath%"
- powershell -NoProfile -ExecutionPolicy bypass ^
- $folders=@(dir -liter '%rootpath%' -recurse^|?{$_ -is [System.IO.DirectoryInfo]});^
- for($i=0;$i -lt $folders.length;$i++){^
- $files=@(dir -liter $folders[$i].FullName^|?{$_ -is [System.IO.FileInfo]});^
- for($j=0;$j -lt $files.length;$j++){^
- $n=1;$f=$false;^
- $newname=$folders[$i].Name+$files[$j].Extension;$newfile=$files[$j].Directory.FullName+'\'+$newname;^
- while(test-path -liter $newfile){^
- if($files[$j].Name -eq $newname){$f=$true;break};^
- $newname=$folders[$i].Name+'_'+$n.toString()+$files[$j].Extension;$newfile=$files[$j].Directory.FullName+'\'+$newname;^
- $n++;^
- };^
- if($f){continue;};^
- write-host ($files[$j].FullName+' --^> '+$newname);^
- mv -liter $files[$j].FullName $newfile -force;^
- };^
- }
- echo;%#% +%$%%$%/%@% %z%
复制代码
- @echo off
- set dd=合并
-
- md "%dd%" 2>nul
-
- for /d %%a in (*)do if not "%%a"=="%dd%" (
-
- echo %%a
-
- for /r %%b in ("%%a\*")do (
-
- echo ... %%~nxb
-
- if exist "%dd%\%%~nxb" (
-
- set n=1&set "f=%%b"
-
- call :yky "%%~nb" "%%~xb"
-
- )else copy "%%b" "%dd%\">nul
-
- )
-
- rd/s/q "%%b"
-
- )
-
- pause
-
- goto :eof
- :yky
-
- set/a n+=1
-
- if exist "%dd%\%~1_%n%%~2" goto :yky
-
- copy "%f%" "%dd%\%~1_%n%%~2">nul
-
- goto :eof
复制代码
作者: qixiaobin0715 时间: 2021-2-10 11:09
本帖最后由 qixiaobin0715 于 2021-2-10 14:10 编辑
回复 1# pyj27 - @echo off
- md 合并
- for /d %%a in (*) do (
- for %%b in ("%%a\*") do (
- move "%%b" "合并\%%a%%~xb"
- )
- rd /s /q %%a
- )
- pause
复制代码
作者: pyj27 时间: 2021-2-10 13:03
回复 2# qixiaobin0715
试了,不行。文件移动了,原文件没有了,但原文件夹还在。
作者: Batcher 时间: 2021-2-10 13:32
回复 3# pyj27
执行2楼代码之后,检查一下是否还有隐藏文件存在所以导致 rd 命令删不掉文件夹?例如:- 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 |