Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Перемещение подкаталогов (http://forum.oszone.net/showthread.php?t=266373)

i3anan 17-08-2013 19:19 2203292

Перемещение подкаталогов
 
Здравствуйте уважаемые гуру.

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

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

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

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

amel27 17-08-2013 20:18 2203311

Цитата:

Цитата i3anan
есть необходимость слияния 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 2203370

Хм, интересное решение, спасибо!

i3anan 25-08-2013 10:00 2207195

Подскажите пожалуйста, что означает эта строка в вышеизложенном решении:

Цитата:

Цитата amel27
::------------------------ »



Время: 15:10.

Время: 15:10.
© OSzone.net 2001-