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

Xsaner 06-06-2012 08:37 1929099

Поочередное перемещение файлов по одному.
 
Добрый день.
Необходимо написать скрипт который перемещает файлы из одной папки в другую по одному (например: 1.txt скопировал-удалил, 2.txt скопировал-удалил ), и оставляет пустую исходную папку.
У меня получился скрипт подобного вида:

Цитата:

XCOPY /S/Q/Y "D:\2\*.*" "D:\22\*.*"
CD /D "D:\" & RD /S/Q "D:\2\*.*"
pause
НО, он сначала копирует весь каталог, а после уже удаляет скопированную папку.
Заранее благодарен за помощь.

Iska 06-06-2012 09:45 1929141

1. Так «скопировал-удалил» или «переместил»? Это принципиально разные вещи.
2. Почему не устраивает имеющийся вариант, который работает быстрее?

Xsaner 06-06-2012 09:57 1929150

Iska,
Мне идеально подходит вариант с перемещением.

Файлов очень много, примерно полмиллиона. Мой вариант не позволяет перезагружать и выключать компьютер, т.к. при принудительном завершении работы батника, и последующем запуске он начинает весь процесс заново.

megaloman 06-06-2012 10:05 1929163

Цитата:

Так «скопировал-удалил» или «переместил»? Это принципиально разные вещи.
- совершенно справедливо. Если перемещение идёт в директориях одного диска, то это делается мигом. И перемещение гораздо безопаснее, сама команда Move отслеживает успешность перемещения. Если Каталог 2 не расшарен и не имеет особых прав доступа, то возможно
Код:

move /Y d:\2 D:\22
md d:\2

Либо, без пересоздания папки 2
Код:

@Echo off
Md D:\22
FOR /F "usebackq delims=" %%i IN (`dir D:\2\*.* /b`) DO Move /Y "D:\2\%%i" "D:\22\"

Либо совсем как хотелось, по одному файлу но с сохранением исходной структуры папок
Код:

@Echo off
SetLocal EnableExtensions
SetLocal EnableDelayedExpansion

Xcopy /T /Y "D:\2\*.*" "D:\22\"

FOR /F "usebackq delims=" %%i IN (`dir "D:\2\*.*" /b /S /A:-D`) DO (
  Set From="%%i"
  Move /Y !From! !From:D:\2\=D:\22\!
)

В принципе, можно после завершения процесса убить и саму исходную папку, но гарантии, что где-то в папке не остались файлы, нет. При необходимости придётся дописать для этого кусок кода, например, вставив анализ на успешность завершения каждого из перемещений (ErrorLevel) (естественно, если папка 2 не пополняется содержимым в процессе обработки).

Iska 06-06-2012 11:13 1929213

megaloman, не только; в первую очередь — получающаяся разница в правах на файл.

Xsaner 06-06-2012 11:34 1929241

Iska, Спасибо, что откликнулись!

megaloman, Взял 1й, а потом и 2й вариант. Очень помогли мне, спасибо.


p.s. только во 2 и 3 решении синтаксис местами не ясен)


Время: 22:46.

Время: 22:46.
© OSzone.net 2001-