我有一个函数(.bat)来搜索和重命名(或移动)具有特定名称的文件夹(称为“数据”)的任何文件夹,且其所有内容都保留在特定路径上(path:\是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时。继续查找并找到TEST2,然后也将其重命名为“ data”,而无需询问。
但是,在两个文件夹(TEST1和TEST2)都位于同一位置的情况下,两个文件夹都应合并(一个覆盖另一个)。重要的是要做到这一点而不问。
但是“ MOVE / Y” 不会覆盖文件夹(仅文件)。我认为解决方案可能是代替覆盖,而是重命名文件或文件夹重复项以避免此失败命令
注意:以前我将Robocopy与“ move”选项一起使用...
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"
但这是不可行的,因为自动复制首先从源复制到目标,然后在源删除。并且,如果TEST1或TEST2文件夹具有2或6 GB的信息,则此过程可能需要几个小时。
非常感谢
谢谢@DavidPostill这就是为什么我出版了。为了帮助我纠正这一点。请记住,TEST1和TEST2文件夹可以在子文件夹中重复进行
—
BrianC