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

Andrey947 18-03-2016 12:42 2617376

Копирование новых файлов
 
Здравствуйте.
Есть каталог C:\AAA с файлами *.*
Есть каталог C:\BBB с подкаталогами 333, 444 и т.д., в которых могут быть те же файлы, что и в C:\111
Нужно скопировать из C:\AAA в С:\IN только те файлы, которых нет в C:\BBB (включая подкаталоги).

megaloman 19-03-2016 17:01 2617776

Цитата:

Цитата Это не ошибка?
...которых могут быть те же файлы, что и в C:\111

Может быть C:\AAA? В этом случае
Код:

@Echo Off

Set "AAA=Z:\A A A"
Set "BBB=Z:\B B B"
Set "In=Z:\In"

FOR /F "usebackq tokens=1,2,* delims=\" %%i IN (`Dir "%AAA%\*.*" /B /S /A:-D 2^>nul`) DO (
        If Not Exist "%BBB%\%%k" Call :Todir "%%i\%%j\%%k" "%In%\%%k"
)
GoTo :Eof

:Todir

If Not Exist "%~dp2" md "%~dp2"
Copy %1 %2 >nul

Я Ваши имена AAA и BBB заменил на A A A и B B B для отладки, Вы, естественно, подставите свои реальные пути

Andrey947 21-03-2016 13:01 2618236

Сейчас при запуске bat-файла в Z:\In копируется полностью содержимое Z:\A A A.
Может из-за структуры каталогов? Она такая:
С:\ХХХ\ААА
С:\ХХХ\ВВВ с подкаталогами
С:\ХХХ\IN
Пути все прописаны правильно.

megaloman 21-03-2016 22:17 2618437

Как была поставлена задача, так она и сделана. Решение делалось для случая, когда папки в корневом каталоге. Ниже решение для случая когда папка ААА является подпапкой папки в корневом каталоге, как у Вас указано во втором варианте постановки задачи. Кстати, критичным для этого решения является вложенность папки ААА, другие папки могут быть где угодно. Причём, если папки In не существует, то она будет создана, если, конечно, это возможно
Код:

@Echo Off

Set "AAA=Z:\xxx\A A A"
Set "BBB=Z:\У попа была собака\xxx\B B B"
Set "In=Z:\Поп ее любил\In"

FOR /F "usebackq tokens=1,2,3,* delims=\" %%i IN (`Dir "%AAA%\*.*" /B /S /A:-D 2^>nul`) DO (
        If Not Exist "%BBB%\%%l" Call :Todir "%%i\%%j\%%k\%%l" "%In%\%%l"
)
GoTo :Eof

:Todir

If Not Exist "%~dp2" md "%~dp2"
Copy %1 %2 >nul



Время: 15:39.

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