批处理文件以递归方式从较深的子目录将文件移动到第一级目录

时间:2013-08-18 02:14:38

标签: windows recursion batch-file move directory

我有一个硬盘驱动器,文件和文件夹以类似的方式排序:

  

F:\ folder1中\文件夹\文件夹\ file.rar

     

F:\ folder1中\文件夹\文件夹\ file1.rar

     

F:\ folder1中\文件夹\文件夹\ file2.rar

     

F:\文件夹2 \文件夹\ file.rar

     

F:\文件夹2 \文件夹\ file1.rar

     

F:\ folder3 \文件夹\ file.rar

     

F:\ folder3 \文件夹\文件夹\文件夹\ file.rar

我想将此驱动器中的所有文件移动到F:\ * \,如果找到重复的文件名则重命名,然后递归删除空文件夹。这些文件夹中有太多,无法找出每个父目录的深度。执行批处理脚本后,文件夹应如下所示:

  

F:\ folder1中\ file.rar

     

F:\ folder1中\ file1.rar

     

F:\ folder1中\ file2.rar

     

F:\文件夹2 \ file.rar

     

F:\文件夹2 \ file1.rar

     

F:\ folder3 \ file.rar

     

F:\ folder3 \ file(1).rar

F:\ * \级别中可能存在文件夹。我希望他们留在原地。

1 个答案:

答案 0 :(得分:3)

试试这个:

@ECHO OFF &SETLOCAL
FOR /r "F:\" %%a IN (*.rar) DO (
    SET "fname=%%~nxa"
    SET "fpath=%%~fa"
    FOR /f "tokens=1,2 delims=\" %%b IN ("%%~fa") DO SET "targetfolder=%%~b\%%~c"
    SETLOCAL ENABLEDELAYEDEXPANSION
    CALL :moveit "!fpath!" "!targetfolder!" "!fname!"
    ENDLOCAL
)
GOTO :eof

:moveit
SETLOCAL
SET "nname=%~3"
:loop
SET /a fcount+=1
IF EXIST "%~2\%nname%" (
    SET "nname=%~n3 (%fcount%)%~x3"
    GOTO :loop
)
ECHO MOVE "%~1" "%~2\%nname%"
MOVE "%~1" "%~2\%nname%"
ENDLOCAL
EXIT /b