批处理文件,以从递归子目录更深的文件移动到第一级目录 [英] Batch file to recursively move files to first level directory from deeper subdirectories

查看:606
本文介绍了批处理文件,以从递归子目录更深的文件移动到第一级目录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这种类似的方式排列文件和文件夹硬盘驱动器:

I have a hard drive with files and folders ordered in this similar manner:

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

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

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

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

F:\\文件夹1 \\文件夹\\文件夹\\ file2.rar

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

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

F:\folder2\folder\file.rar

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

F:\folder2\folder\file1.rar

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

F:\folder3\folder\file.rar

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

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

我想在这个驱动器将所有文件复制到F:\\ * \\,如果重命名一个重复的文件名被发现,并递归然后删除空文件夹。有太多的这些文件夹,找出每个父目录有多深。执行批处理脚本后,文件夹应该是这样的:

I'd like to move all files in this drive to F:\*\ , rename if a duplicate filename is found, and recursively delete empty folders afterwards. There's just too many of these folders to find out how deep each parent directory is. After executing the batch script the folders should look like:

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

F:\folder1\file.rar

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

F:\folder1\file1.rar

F:\\文件夹1 \\ file2.rar

F:\folder1\file2.rar

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

F:\folder2\file.rar

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

F:\folder2\file1.rar

F:\\ folder3 \\ file.rar

F:\folder3\file.rar

F:\\ folder3 \\文件(1).rar程序

F:\folder3\file (1).rar

有可能与已经在里面F文件的文件夹:\\ * \\水平。我希望他们留他们在哪里。

There might be folders with files already inside the F:\*\ level. I want them to stay where they are.

推荐答案

试试这个:

@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

这篇关于批处理文件,以从递归子目录更深的文件移动到第一级目录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆