求批处理命令解决多层文件夹嵌套的问题

文件夹层层嵌套,模式是这样的:
a01夹中有子文件夹b01,b02,b03…
b01子文件夹中有子文件夹c01,c02,c03…
b02子文件夹中有子文件夹d01,d02,d03…
b03子文件夹中有子文件夹e01,e02,e03…

a02夹中有子文件夹b01,b02,b03…
b01子文件夹中有子文件夹c01,c02,c03…
b02子文件夹中有子文件夹d01,d02,d03…
b03子文件夹中有子文件夹e01,e02,e03…

a03夹中有子文件夹b01,b02,b03…
b01子文件夹中有子文件夹c01,c02,c03…
b02子文件夹中有子文件夹d01,d02,d03…
b03子文件夹中有子文件夹e01,e02,e03…

以此类推。。。
最底层文件夹里有文件,中间层文件夹内没有文件,只有下一级文件夹。(另:文件夹的位数不一定三位,可能一位两位或者四位五位。)
要求指定路径后,输出的结果摆脱文件夹嵌套,形成同一级文件夹,文件夹中内容不变,格式要求是这样的:
a01-b01-c01。。。。

最好先弄个测试文件夹以免搞错
批处理文件放要处理的总文件夹,会把所有该层以下各子层含有文件的文件夹改为带上所属中间层文件夹名移到批处理文件并列位置,然后删去空文件夹(实际是删去所有子文件夹) 我认为这样很好,如实在要指定一文件夹,把第二行前的::去掉并修改等号后内容

@echo off&setlocal enabledelayedexpansion
::set "np=e:\xx\xxx"
if not defined np set "np=%~dp0"
if "%np:~-1%"=="\" set np=%np:~,-1%
cd/d "%~dp0"
set "fnp=%np:\=\\%"
for /f "delims=" %%a in ('dir/s/b/ad^|findstr /ixv "%fnp%"^|sort/r')do (
rd "%%a" 2>nul&&echo 删除 %%a||(
set "s=%%~a"
set "ns=!s:%~dp0=!"
set "ns=!ns:\=-!"
ren "%%~a" "!ns!"
move "%%~dpa!ns!" "%np%"
echo %%~dpa!ns! =^>%np%))
pause追问

超棒,测试成功!不过执行第二行命令“set "np=e:\xx\xxx"时,数据结果有误,丢失最后一个文件夹。
能否再帮忙写一个反向程序,即将同一目录下a01-b01-c01这样格式的大量文件夹,处理成多层嵌套,结果如原始问题中的嵌套模式?
如能帮忙,将再追加100分。如果不能,也会将本回答选为最佳答案,谢谢!

追答

@echo off
cd/d "%~dp0"
for /f "delims=" %%a in ('dir/b/ad *-*')do (
echo %%a
set "s=%%a"
setlocal enabledelayedexpansion
set "s=!s:-=" "!"
for %%b in ("!s!")do (
if not exist %%b md %%b
cd %%b)
move "%~p0%%a\*.*">nul
cd "%~p0"
rd/q "%%a"
endlocal)
pause

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-01
哪个,看的有点思维混乱。。。
是否只要弄成
a01-b01-c01

a02-b01-c01

a03-b01-c01

文件放在c01里,别的文件夹删除?
(另:文件夹的位数不一定三位,可能一位两位或者四位五位。)什么意思?追问

结果输出到指定文件夹中,而不是保留在原文件夹里,a01-b01-c01为文件夹名称,里面保留原c01的内容。所有中层文件夹均删除。

文件夹位数不一定三位a01,可能是两位a1,或者五位a0001。

第2个回答  2013-03-01
是你没说清楚还是我没看明白,总之想帮你有点力不从心。追问

就是把最底层的文件夹全部分离出来,放在同一级目录下面,因为最底层文件夹名称相同,直接复制出来,会被相互覆盖,所以用短线连接,将上面几层文件夹名称接i起来,合成类似a01-b01-c01样式的文件夹。这样就不会出现被覆盖的情况了。这样每一个新文件夹,都包含上面几层文件夹的信息,也会分类清晰。