1

У меня есть функция (.bat) для поиска и переименования (или перемещения) любой папки с определенным именем папки (вызов "data"), со всем ее содержимым, по определенному пути (путь:\ Является ли конкретный маршрут, например, c:\ или ч :)

Мне нужно упростить это и заставить его работать.

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) находятся в одном и том же месте, обе должны быть объединены (одна переопределяет другую). Важно сделать это, не спрашивая.

Но «MOVE /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 ГБ информации, этот процесс может занять несколько часов.

большое спасибо

1 ответ1

2

я хотел бы использовать

ROBOCOPY "% Test%" Data /MOVE /E

Robocopy устанавливается по умолчанию в Windows и делает все, что вы хотите, за один проход.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .