Войти

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


Fanbeer
30-11-2015, 21:19
Подскажите пожалуйста как с помощью батника и команды XCOPY скопировать все файлы из каталога за исключением файлов начинающихся с подчеркивания ( __111.txt ) в папку с текущей датой?

megaloman
30-11-2015, 22:58
Если имена самой папки и её подпапок не начинаются с подчёркивания (кстати, у Вас в задании два подчеркивания - это часом не ошибка, файлы не должны начинаться с двух подчеркиваний?) то так:@Echo Off

Set "From=D:\Dir1"
Set "To=D:\Dir2"

Echo \_ >~tmp.tmp

Set "Dt=%Date:~6,4%%Date:~3,2%%Date:~0,2%"

Xcopy "%From%\*.*" "%To%\%Dt%\" /s /y /q /EXCLUDE:~tmp.tmp
Del ~tmp.tmp Предполагал, что дата в системе отображается как дд.мм.гггг. Копируется в папку ггггммдд.Содержимое папки Dir1 копируется в папку Dir2 вместе с подпапками командой xcopy. Смысл её ключей смотрите при запуске команды xcopy /? в командном окне. Чтобы исключить копирование файлов, начинающихся на _ , до копирования организуем командой echo текстовый файл ~tmp.tmp со строкой c частью полного имени исключаемых файлов \_ . Этот файл указываем в ключе exclude в xcopy и после копирования удаляем.

Fanbeer
30-11-2015, 23:22
Спасибо. Я завтра посмотрю точно но возможно файлы и с двумя подчеркиваниями. Если не трудно можете прокомментировать что есть что в этом файле?

Fanbeer
01-12-2015, 08:12
Спасибо Вам огромное за помощь! Если можно, последний вопрос, как исключить копирование каталогов находящихся в той же директории?
Пардон, с этим разобрался сам:) Вопрос встал, как архивировать файлы при копировании или копировать сразу в архив с текущей датой?

Fanbeer
01-12-2015, 12:43
Да нужно заархивировать из корневой папки файлы в архив с текущей датой, исключая файлы начинающиеся с подчеркивания. Из подкаталогаов по хорошему нужно архивировать в отдельную папку файлы созданные вчерашним днем:)

Fanbeer
01-12-2015, 16:13
-там файлы только созданные в текущем дне или надо архивировать только файлы текущего дня, или всё что там есть (исключая _) в архив с именем текущей даты? » Из корневого каталога архивировать все файлы исключая те которые начинаются с ( _ ) и исключая папки которые находятся в этом каталоге.

Из папок которые находятся в корневом каталоге, копировать в отдельную папку ( например "Журнал" ) файлы созданные предыдущем днем.

Файлы небольшого размера.

megaloman
01-12-2015, 17:24
@Echo Off

Set "From=D:\Dir1"
Set "ToT=D:\Dir2\Today_"

Set "MaskOff=_*.*"

Set "Arc=%ProgramFiles%\winrar\winrar.exe"
rem Set "Arc=%ProgramFiles%\winrar\rar.exe"

md "%ToT%" 2>nul

"%Arc%" a -x%MaskOff% -agYYYYMMDD "%ToT%\.rar" "D:\Dir1\*.*" @Echo Off

Set "From=D:\Dir1"
Set "ToY=D:\Dir2\Yesterday_"

Set "MaskOff=_*.*"

Set "Arc=%ProgramFiles%\winrar\winrar.exe"
REM Set "Arc=%ProgramFiles%\winrar\rar.exe"

md "%ToY%" 2>nul

Set "Dt=%Date:~6,4%%Date:~3,2%%Date:~0,2%"
FOR /F "usebackq delims=" %%i IN (`Dir "%From%\*.*" /b /A:D 2^>nul`) Do (
"%Arc%" a -tn2d -tb%Dt%0000 -x%MaskOff% -agYYYYMMDD "%ToY%\.rar" "D:\Dir1\%%i\*.*"
)@Echo Off

Set "From=D:\Dir1"
Set "ToT=D:\Dir2\Today_"
Set "ToY=D:\Dir2\Yesterday_"

Set "MaskOff=_*.*"

Set "Arc=%ProgramFiles%\winrar\winrar.exe"
rem Set "Arc=%ProgramFiles%\winrar\rar.exe" >nul

md "%ToT%" 2>nul
md "%ToY%" 2>nul

"%Arc%" a -x%MaskOff% -agYYYYMMDD "%ToT%\.rar" "D:\Dir1\*.*"

Set "Dt=%Date:~6,4%%Date:~3,2%%Date:~0,2%"
FOR /F "usebackq delims=" %%i IN (`Dir "%From%\*.*" /b /A:D 2^>nul`) Do (
"%Arc%" a -tn2d -tb%Dt%0000 -x%MaskOff% -agYYYYMMDD "%ToY%\.rar" "D:\Dir1\%%i\*.*"
)

Fanbeer
01-12-2015, 19:30
Архив получился:) но вот из подкаталога файл за вчерашний день не скопировался!

megaloman
01-12-2015, 21:33
Fanbeer, Естественно, это вторая задача. Уже сделал.

Fanbeer
01-12-2015, 23:04
megaloman, Спасибо огромное, реально выручили, дома попробовал все отлично работает:)

Fanbeer
02-12-2015, 08:35
Можно маленькое уточнение? В строке FOR /F "usebackq delims=" %%i IN (`Dir "%From%\*.*" /b /A:D 2^>nul`) Do ( то что выделено красным цветом, это команда или имя папки? Если папки то какой?

megaloman
02-12-2015, 09:08
Это команда, которая получает (в данном применении) список подпапок вашей папки %From% (в примерах это D:\Dir1). Ключи команды смотрим традиционным образом dir /?

Fanbeer
02-12-2015, 14:08
Эх к сожалению во время архивации WinRar выдает ошибку ( Невозможно открыть \\XXX1\d$\ZZZZZ\DBF\XXXXXX.cdx Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.). Можно это как то сделать с помощь ZIP? Или возможно в WinRar есть ключ который исключает проверку?

megaloman
02-12-2015, 14:38
Подозреваю, с zip будет та же проблема. Попробуйте при вызове winrar добавить ключ -dh Ключ -DH — открывать совместно используемые файлы


--------------------------------------------------------------------------------


Позволяет обрабатывать файлы, открытые для записи другими программами.

Это опасный ключ, так как он разрешает архивировать те файлы, которые в тот же момент могут быть изменены другой программой. Если при этом будет нарушена внутренняя структура заархивированного файла, то программа для его обработки после распаковки такого файла может его не открыть. Используйте этот ключ очень осторожно!

Если ключ -dh не указан, то обработка совместно используемых файлов зависит от установки параметра "Открывать совместно используемые файлы" в профиле архивации по умолчанию.


Пример:

WinRAR a -dh dbf *.dbf

Fanbeer
02-12-2015, 16:05
Ура, все получилось:)

Iska
02-12-2015, 18:03
Ура, все получилось »
Fanbeer, а теперь попробуйте восстановить из полученного архива в другом месте и проверить работоспособность :). Подозреваю, что полученный таким образом указанный *.cdx индекс может быть не вполне работоспособен.

megaloman
02-12-2015, 18:50
ИМХО, .cdx можно восстановить, но подозреваю, что при этом и .dbf тоже занят и качество копии базы весьма сомнительна.

Fanbeer
02-12-2015, 18:51
Fanbeer, а теперь попробуйте восстановить из полученного архива в другом месте и проверить работоспособность . Подозреваю, что полученный таким образом указанный *.cdx индекс может быть не вполне работоспособен. » Ну если архивирование таким образом ни чем не отличается от простого копирования, то я думаю все будет работать.

Раньше приходилось делать это вручную и по этому хочу автоматизировать процесс архивирования.

Iska
02-12-2015, 19:48
Ну если архивирование таким образом ни чем не отличается от простого копирования, »
Дело не в том. Перечитайте ещё раз:
Позволяет обрабатывать файлы, открытые для записи другими программами.

Это опасный ключ, так как он разрешает архивировать те файлы, которые в тот же момент могут быть изменены другой программой. Если при этом будет нарушена внутренняя структура заархивированного файла, то программа для его обработки после распаковки такого файла может его не открыть. Используйте этот ключ очень осторожно!

то я думаю все будет работать. »
Вот именно такой архив нужно проверить.

Сам индекс можно перестроить (как верно указывает коллега megaloman). Но что, если в «подвешенном» состоянии окажется какой-нибудь *.dbf? Как правило — жёппа.

Fanbeer
02-12-2015, 20:09
Дело не в том. Перечитайте ещё раз: » Я понимаю что файл во время архивирования может быть занят другим приложением! Разве при обычном копировании файлов из базы не может получиться подобное?




© OSzone.net 2001-2012