PDA

Показать полную графическую версию : [решено] Перемещение подкаталогов


i3anan
17-08-2013, 19:19
Здравствуйте уважаемые гуру.

Появился такой вопрос: существует ли аналог команды "move" который работает с подкаталогами также, как команда "xcopy"?
Поясню: есть необходимость перемещения и переименование папки "путь1\а_" (которая содержит файлы и каталоги) в "путь2\a", важное замечание - "путь2\" уже содержит папку "a".
Очень долго пользовался сочетанием:

xcopy путь1 путь2
rd путь1

но данное сочетание перестало удовлетворять в связи с увеличивающимся размером и количеством файлов в папке а_. Просто копирование и удаление в сумме занимает большее время чем перемещение, и это стало существенно заметно по вышеописанным причинам, а команда "move" либо переносит одну папку (но не заменяет, если такая уже имеется), либо переносит содержимое папки, но не подкаталоги.
Варианты с ROBOCOPY не предлагать так как батник используется на разных осях и ставить соответствующие Resource Kit'ы например на ХРюшу ради батника смысла не вижу.

В общем подытожу: есть необходимость слияния 2х папок (всего их содержимого), не используя операторы копирования\удаления а именно ПЕРЕНОСА, существует ли такая возможность?

amel27
17-08-2013, 20:18
есть необходимость слияния 2х папок (всего их содержимого), не используя операторы копирования\удаления а именно ПЕРЕНОСА, существует ли такая возможность? »как вариант - перенести пофайлово и потом удалить исходный каталог:
@echo off

call:MoveDir "Путь1\Каталог1" "Путь2\Каталог2"

Exit/B

:MoveDir Dir_From Dir_To
::------------------------
setlocal DisableDelayedExpansion
for /f "delims=" %%a in ('dir/b/s/a-d "%~1\*"2^>nul') do (
set "F1=%%~a"
set "P1=%%~dpa"
call set "F2=%%F1:%~1=%~2%%"
call set "P2=%%P1:%~1=%~2%%"

setlocal EnableDelayedExpansion
if not exist "!P2!" md "!P2!"
move/-y "!F1!" "!F2!"
endlocal
)
dir/b/s/a-d "%~1\*"2>nul|find/v ""||rd/s/q "%~1"
endlocal
GoTo:EOF

i3anan
17-08-2013, 22:42
Хм, интересное решение, спасибо!

i3anan
25-08-2013, 10:00
Подскажите пожалуйста, что означает эта строка в вышеизложенном решении:

::------------------------ »




© OSzone.net 2001-2012