我有一个硬盘,里面的文件和文件夹以类似的方式排列:
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