我有一个硬盘驱动器,文件和文件夹以类似的方式排序:
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:\ * \级别中可能存在文件夹。我希望他们留在原地。
答案 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