Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Windows |
![]() ![]() |
Alexey0371
Guest |
Задача: есть папки с:\1\ и с:\2\, в которых лежат файлы. Нужно скопировать из 2 в 1 те файлы, которых нет в папке 1, Удалть из папки 1 те файлы, которых нет в папке 2. Нужно сделать это в командной строке. Заранее благодарен. |
24 сен 08, 07:44 [6220273] Ответить | Цитировать Сообщить модератору |
Damien Member Откуда: седьмой круг Сообщений: 2434 |
удалить всё из 1 и скопировать туда 2 - не катит? А для настоящей синхронизации есть мелкие и более простые в использовании утилиты. Включая бесплатные. SyncBack FolderShare |
||
24 сен 08, 08:10 [6220298] Ответить | Цитировать Сообщить модератору |
Alexey0371
Guest |
Дело в том объем данных большой, если сделать как ты предлагаешь то это займет около 3 часов копирования. |
24 сен 08, 08:15 [6220305] Ответить | Цитировать Сообщить модератору |
Damien Member Откуда: седьмой круг Сообщений: 2434 |
если нужна ещё и замена старых файлов: xcopy c:\источник\* \\другойкомпьютер\шара\ /D /Y Если в папке 1 есть файлы имена которых есть в 2 и они должны оставаться нетронутыми (т.е. дословно - "Нужно скопировать из 2 в 1 те файлы, которых нет в папке 1"): DIR t:\test1\ /B > t:\test3\list.txt xcopy t:\test2\* t:\test1\ /D /Y /EXCLUDE:t:\test3\list.txt в примере t:\test1\ это 1 t:\test2\ это 2 bat файл и список в папке t:\test3 а вот над удалением несуществующих в папке 2 надо ещё подумать. В утилитах синхронизаторах несколько проще. http://www.2brightsparks.com/freeware/ SyncBack Freeware V3.2.19.0 Command Line - поддерживает, но надо посмотреть может ли он выполнить задачу... |
||
24 сен 08, 08:54 [6220360] Ответить | Цитировать Сообщить модератору |
Alexey0371
Guest |
Копирование, я реализовал. Проблема у меня в самом удаление. А можно удалить список файлов, которые находятся в техстовом документе? |
24 сен 08, 09:09 [6220388] Ответить | Цитировать Сообщить модератору |
Damien Member Откуда: седьмой круг Сообщений: 2434 |
про удаление: [quote]@echo off setlocal set "folder=C:\Temp" set "no_del_list=c:\no_del.txt" for /f "tokens=*" %%a in ('dir /b /a-d "%folder%" ^| findstr /i /v /g:"%no_del_list%"') do del /q "%folder%\%%a" 2>nul Вместо C:\Temp пишешь путь к директории, где надо удалить файлы. Вместо c:\no_del.txt пишешь путь к файлу, где находится список имен, которые не надо удалять. Каждое имя файла в списке должно быть на новой строке. http://forum.ru-board.com/topic.cgi?forum=5&topic=4582&start=1160 [/quote] |
24 сен 08, 09:30 [6220454] Ответить | Цитировать Сообщить модератору |
Alexey0371
Guest |
Я так глубоко не вникал в это. А почему после выполнения for /f "tokens=*" %%a in ('dir /b /a-d "%folder%" ^| findstr /i /v /g:"%no_del_list%"') do del /q "%folder%\%%a" 2>nul Мне пишет вот: Непредвиденное появление: %%a. |
24 сен 08, 11:33 [6221191] Ответить | Цитировать Сообщить модератору |
Damien Member Откуда: седьмой круг Сообщений: 2434 |
ну так параметры задаются двумя строками выше: @echo off setlocal set "folder=C:\Temp" set "no_del_list=c:\no_del.txt" PS да, и поосторожней там с экспериментами. Скрипт в мгновение ока может удалить нужную инфу и себя. Я уже файлы восстанавливал :) |
||
24 сен 08, 12:01 [6221394] Ответить | Цитировать Сообщить модератору |
Alexey0371
Guest |
Все решил проблему!! Создал батник: xcopy D:\test\2 D:\test\1 /d /y dir D:\test\2 /b >file.txt D:\test\del_file.bat ------------ где del_file.bat @echo off setlocal set "folder=D:\test\1" set "no_del_list=D:\test\file.txt" for /f "tokens=*" %%a in ('dir /b /a-d "%folder%" ^| findstr /i /v /g:"%no_del_list%"') do del /q "%folder%\%%a" 2>nul -------------- и все работает! ps: спасибо Damien |
24 сен 08, 14:59 [6222983] Ответить | Цитировать Сообщить модератору |
rrrrrrrrrr Member Откуда: РТ Сообщений: 6367 |
ага, работает, но может подвисать на больших файлах. В итоге оптимальный выбор все-таки robocopy (ResKit), который умеет, кстати, сам делать зеркало, т.е. именно синхронизировать, а не просто копировать |
26 сен 08, 00:12 [6230643] Ответить | Цитировать Сообщить модератору |
Все форумы / Windows | ![]() |