0

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

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

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

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

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

F:\folder2\folder\file1.rar

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

F:\folder3\文件夹\文件夹\文件夹\文件.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:\\*\关卡中可能存在包含文件的文件夹。我希望他们留在原地。

4

1 回答 1

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
于 2013-08-18T07:28:43.050 回答