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



我有一个硬盘,里面的文件和文件夹以类似的方式排列:

F: \folder1\folder\folder\file.rar

F: \folder1\folder\folder\file1.rar

F: \folder1\folder\folder\file2.rar

F: \folder2\folder\file.rar

F: \folder2\folder\file1.rar

F: \folder3\folder\file.rar

F: \folder3\folder\folder\folder\file.rar

我想将此驱动器中的所有文件移动到F:\*,如果发现重复的文件名,请重命名,然后递归删除空文件夹。这些文件夹太多了,无法了解每个父目录的深度。执行批处理脚本后,文件夹应该看起来像:

F: \folder1\file.rar

F: \folder1\file1.rar

F: \folder1\file2.rar

F: \folder2\file.rar

F: \folder2\file1.rar

F: \folder3\file.rar

F: \folder3\file(1).rar

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

试试这个:

@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

最新更新