不好意思,理解有误。
修改后的代码:
@echo off
echo 移动文件中...
for /f "delims=" %%i in ('dir *.* /a-d /s /b') do (
if not "%%~dpi"=="%~dp0" call :movefile "%%i"
)
echo 移动文件完成!
pause&exit
:movefile
if exist "%~dp0%~nx1" set "n="&goto renfile
move %1 "%~dp0">nul 2>nul||(attrib -r -h -s %1& move %1 "%~dp0">nul)
goto :eof
:renfile
set/a n+=1
if exist "%~dp0%~n1(%n%)%~x1" goto renfile
move %1 "%~dp0%~n1(%n%)%~x1">nul 2>nul||(
attrib -r -h -s %1& move %1 "%~dp0%~n1(%n%)%~x1">nul)
goto :eof
说明:
只移动所有文件,比移动所有目录就容易多了。
上面的批处理,移动所有子目录中的文件到根目录中。就是B级目录,C级目录及下面它们下面的子目录中的文件都移动到A根目录中。如果存在重名,就重新用文件(数字)后缀重命名。实现你问题里的要求。
下面是实现你问题补充里的要求,就是只移动C级子目录及其以下子目录里的文件到A根目录里,不移动B级目录里的文件到根目录。
@echo off
echo 移动文件中...
for /f "delims=" %%i in ('dir /ad /b') do (
pushd "%%i"
for /f "delims=" %%j in ('dir /a-d /s /b') do (
if not "%%~dpj"=="%~dp0%%i\" call :movefile "%%j")
popd
)
echo 移动文件完成!
pause&exit
:movefile
if exist "%~dp0%~nx1" set "n="&goto renfile
move %1 "%~dp0">nul 2>nul||(attrib -r -h -s %1& move %1 "%~dp0">nul)
goto :eof
:renfile
set/a n+=1
if exist "%~dp0%~n1(%n%)%~x1" goto renfile
move %1 "%~dp0%~n1(%n%)%~x1">nul 2>nul||(
attrib -r -h -s %1& move %1 "%~dp0%~n1(%n%)%~x1">nul)
goto :eof
这是vbs代码,可以是实现你需要的功能,将以下代码保存在一个文本文件里面更改扩展名为vbs即可运行。
'============代===码======开===始=======================
On Error Resume Next
name="d:\A" '在这里写下你的A文件夹的完整路径
set fso=CreateObject("Scripting.FileSystemObject")
set fa=fso.Getfolder(name)
SET fas=fa.SUBfolders
for each f1 in fas
set fb=fso.getfolder(f1)
set fbs=fb.SUBfolders
for each f2 in fbs
f2.move name&"\"
Next
Next
'============代===码======结===束=======================