重命名(或移动)特定路径上的文件夹、子文件夹和文件

重命名(或移动)特定路径上的文件夹、子文件夹和文件

我有一个函数(.bat)来搜索并重命名(或移动)具有特定名称文件夹(称为“数据”)的任何文件夹,其所有内容完好无损,在特定路径上(路径:\是特定路线,如c:\或h:)

我需要简化它并使其发挥作用。

call:test "TEST1"
call:test "TEST2"

:: funcion test
@echo off
pause
goto:eof
:test
 set test=%1
 CD /D path:\
 if exist "%test%" (goto make) else (goto end)
 :make
 MOVE /Y "%test%" data
 FOR /F %%x IN ("%test%") DO REN "%%x" data
 FOR /F "tokens=*" %%G IN ('DIR /B /AD /S "%test%"') DO MOVE /Y "%%G" data
 :end
 echo OK
 goto:eof

TEST1 和 TEST2 文件夹包含许多文件和子文件夹。问题是我使用三个命令来完成这项工作,但并不是 100% 有效。

 MOVE /Y "%test%" data
 FOR /F %%x IN ("%test%") DO REN "%%x" data
 FOR /F "tokens=*" %%G IN ('DIR /B /AD /S "%test%"') DO MOVE /Y "%%G"

我需要重命名文件夹 TEST1 和 TEST2,无论它们在路径中的什么位置(可能是在根目录中或子文件夹中。两者都应重命名(合并)为“数据”)。

示例:TEST1 和 TEST2 文件夹包含内容(文件和子文件夹)。“.bat”搜索路径以查找 TEST1,找到后将 TEST1 重命名为“data”。继续查找并找到 TEST2 并将其重命名为“data”都没问一下

但是,如果两个文件夹(TEST1 和 TEST2)位于同一位置,则应该合并(一个覆盖另一个)。重要的是不问不答地去做

但“移动/Y”不覆盖文件夹(仅覆盖文件)。我认为解决方案可能是不要覆盖,而是重命名文件或文件夹重复以避免此失败命令

笔记:以前我使用带有“移动”选项的 Robocopy......

SET MoveDirSource=path:\"%test%"
SET MoveDirDestination=path:\data
MKDIR "%MoveDirDestination%"
FOR %%i IN ("%MoveDirSource%\*") DO MOVE /Y "%%i" "%MoveDirDestination%\%%~nxi"
FOR /D %%i IN ("%MoveDirSource%\*") DO ROBOCOPY /MOVE /E /W:5 "%%i" "%MoveDirDestination%\%%~nxi"

但这并不可行,因为 robocopy 首先从源复制到目标,然后在源处删除。如果 TEST1 或 TEST2 文件夹包含 2 或 6 GB 的信息,此过程可能需要数小时。

多谢

答案1

我会用

ROBOCOPY“%Test%”数据/MOVE/E

Robocopy 在 Windows 中默认安装,一次性完成所有您想要的操作。

相关内容