Войти

Показать полную графическую версию : Копирование со структурой


westovich
04-06-2016, 10:00
Всем привет!

Помогите пожалуйста, выкурил форум, но ответа не нашёл.
Есть задача скопировать файлы с сохранением структуры каталогов в другой каталог и потом грохнуть копируемые файлы. Места мало, целиком скопировать в другой каталог не получится и поэтому делаю цикл.
Структура каталогов примерно такая:

D:\TEST
+---11
+---3
| SANY2466.JPG
| Тест тест.JPG
|
+---4
| SANY2476.AVI
| SANY2478.JPG
| Тест тест.JPG
|
\---6
SANY2455.JPG
SANY2456.JPG
SANY2461.JPG
Тест тест.JPG

Сначала в цикле пытаюсь скопировать с сохранением структуры, потом буду удалять:
D:\>for /R D:\Test %d in ("*") do (xcopy /E "%d" D:\1)

И вот тут начинаются сюрпризы - копируется всё целиком без сохранения структуры каталогов.
Подскажите пожалуйста, что я делаю не так?

Спасибо!

megaloman
04-06-2016, 16:18
westovich, Вы себе противоречите. Есть задача скопировать файлы с сохранением структуры каталогов в другой каталог и потом грохнуть копируемые файлы Затем Вы делаете попытку, как мне показалось, скопировать полностью каталог test. Об удалении речь не идёт. При этом Вы пИшите Места мало, целиком скопировать в другой каталог не получится @Echo off

Set "InBox=D:\Test"
Set "OutBox=D:\1"

Pushd "%InBox%"

Xcopy /E *.* "%OutBox%\"

@Echo off

SetLocal EnableExtensions EnableDelayedExpansion

Set "InBox=D:\Test"
Set "OutBox=E:\1"

Pushd "%InBox%"

move /Y *.* "%OutBox%\" >nul 2>nul
FOR /F "usebackq delims=" %%d IN (`Dir /b /s /A:D 2^>nul`) DO (
Set "Out=%%d"
Set Out=!Out:%InBox%=%OutBox%!
md "!Out!\" 2>nul
move /Y "%%d\*.*" "!Out!\" >nul 2>nul
)

@Echo off
cls

Set "InBox=D:\Test"
Set "OutBox=D:\1"

Pushd "%InBox%"

move /Y *.* "%OutBox%\"
FOR /F "usebackq delims=" %%d IN (`Dir /b /A:D 2^>nul`) DO (
move /Y "%InBox%\%%d" "%OutBox%\" >nul
)

Iska
04-06-2016, 16:36
Подскажите пожалуйста, что я делаю не так? »
Пользуйтесь не той операцией для «копирование-удаление». Используйте банальное перемещение, желательно — ручное.

westovich
05-06-2016, 09:47
Проблема задачи проста - на резервных носителях HDD, из-за долгого времени хранения (уже больше 7 лет), началась деградация данных. Лечение простое - скопировать данные. Сам носитель цел и для копирования и последующего удаления копируемых данных целиком места там нет. В такой ситуации не спасает и перемещение, т.к. это просто запись файловой системы. Поэтому нужен цикл копирования и последующего удаления копируемого. При этом нужно сохранение структуры - копирую множество каталогов с данными.
В общем нужно из каталога D:\1 по очереди скопировать с подкаталогами все файлы в D:\2 с последующим удалением копируемого и сохранением структуры D\:1

Начал я с цикла копирования, т.к. добавить потом удаление не проблема, как оказалось проблема скопировать..... :)

Помогите пожалуйста.

Iska
05-06-2016, 10:18
westovich, в таком случае просто возьмите DiskFresh - Refresh Hard Disk Signal (http://www.puransoftware.com/DiskFresh.html) и используйте.

Foreigner
05-06-2016, 10:47
Если уж надо "перекопировать", то:

@echo off

2>nul md "D:\2"
subst x: "D:\2"

subst z: "D:\1"
pushd z:\

for /f "tokens=*" %%i in ('dir /b /s /ad') do 2>nul md "x:%%~pnxi"
for /f "tokens=*" %%i in ('dir /b /s /a-d') do copy "%%~pnxi" "x:%%~pnxi" && del "%%i"

popd
subst z: /d
subst x: /d

westovich
09-06-2016, 08:34
О как, и тот и тот вариант обязательно попробую. Особенно DiskFresh :)

Спасибо!

З.Ы.
Честно, не знал, что такая тулза есть.




© OSzone.net 2001-2012