Компьютерный форум 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=315531)

westovich 04-06-2016 10:00 2640111

Копирование со структурой
 
Всем привет!

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

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 2640190

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 2640193

Цитата:

Цитата westovich
Подскажите пожалуйста, что я делаю не так? »

Пользуйтесь не той операцией для «копирование-удаление». Используйте банальное перемещение, желательно — ручное.

westovich 05-06-2016 09:47 2640345

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

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

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

Iska 05-06-2016 10:18 2640352

westovich, в таком случае просто возьмите DiskFresh - Refresh Hard Disk Signal и используйте.

Foreigner 05-06-2016 10:47 2640361

Если уж надо "перекопировать", то:
Код:

@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 2641597

О как, и тот и тот вариант обязательно попробую. Особенно DiskFresh :)

Спасибо!

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


Время: 14:12.

Время: 14:12.
© OSzone.net 2001-