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