XCOPY выборочное копирование файлов.
Подскажите пожалуйста как с помощью батника и команды XCOPY скопировать все файлы из каталога за исключением файлов начинающихся с подчеркивания ( __111.txt ) в папку с текущей датой?
|
Если имена самой папки и её подпапок не начинаются с подчёркивания (кстати, у Вас в задании два подчеркивания - это часом не ошибка, файлы не должны начинаться с двух подчеркиваний?) то так:
Код:
@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 и после копирования удаляем.
|
Спасибо. Я завтра посмотрю точно но возможно файлы и с двумя подчеркиваниями. Если не трудно можете прокомментировать что есть что в этом файле?
|
Спасибо Вам огромное за помощь! Если можно, последний вопрос, как исключить копирование каталогов находящихся в той же директории?
Пардон, с этим разобрался сам:) Вопрос встал, как архивировать файлы при копировании или копировать сразу в архив с текущей датой?
|
Да нужно заархивировать из корневой папки файлы в архив с текущей датой, исключая файлы начинающиеся с подчеркивания. Из подкаталогаов по хорошему нужно архивировать в отдельную папку файлы созданные вчерашним днем:)
|
Цитата:
Цитата megaloman
-там файлы только созданные в текущем дне или надо архивировать только файлы текущего дня, или всё что там есть (исключая _) в архив с именем текущей даты? »
|
Из корневого каталога архивировать все файлы исключая те которые начинаются с ( _ ) и исключая папки которые находятся в этом каталоге.
Из папок которые находятся в корневом каталоге, копировать в отдельную папку ( например "Журнал" ) файлы созданные предыдущем днем.
Файлы небольшого размера.
|
Из корневого каталога архивировать все файлы исключая те которые начинаются с ( _ ) и исключая папки которые находятся в этом каталоге.
Код:
@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, Естественно, это вторая задача. Уже сделал.
|
megaloman, Спасибо огромное, реально выручили, дома попробовал все отлично работает:)
|
Можно маленькое уточнение? В строке FOR /F "usebackq delims=" %%i IN (`Dir "%From%\*.*" /b /A:D 2^>nul`) Do ( то что выделено красным цветом, это команда или имя папки? Если папки то какой?
|
Это команда, которая получает (в данном применении) список подпапок вашей папки %From% (в примерах это D:\Dir1). Ключи команды смотрим традиционным образом dir /?
|
Эх к сожалению во время архивации WinRar выдает ошибку ( Невозможно открыть \\XXX1\d$\ZZZZZ\DBF\XXXXXX.cdx Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.). Можно это как то сделать с помощь ZIP? Или возможно в WinRar есть ключ который исключает проверку?
|
Подозреваю, с zip будет та же проблема. Попробуйте при вызове winrar добавить ключ -dh
-dh (читаем в справочной системе winrar)
Ключ -DH — открывать совместно используемые файлы
--------------------------------------------------------------------------------
Позволяет обрабатывать файлы, открытые для записи другими программами.
Это опасный ключ, так как он разрешает архивировать те файлы, которые в тот же момент могут быть изменены другой программой. Если при этом будет нарушена внутренняя структура заархивированного файла, то программа для его обработки после распаковки такого файла может его не открыть. Используйте этот ключ очень осторожно!
Если ключ -dh не указан, то обработка совместно используемых файлов зависит от установки параметра "Открывать совместно используемые файлы" в профиле архивации по умолчанию.
Пример:
WinRAR a -dh dbf *.dbf
|
Fanbeer, а теперь попробуйте восстановить из полученного архива в другом месте и проверить работоспособность :). Подозреваю, что полученный таким образом указанный *.cdx индекс может быть не вполне работоспособен.
|
ИМХО, .cdx можно восстановить, но подозреваю, что при этом и .dbf тоже занят и качество копии базы весьма сомнительна.
|
Цитата:
Цитата Iska
Fanbeer, а теперь попробуйте восстановить из полученного архива в другом месте и проверить работоспособность . Подозреваю, что полученный таким образом указанный *.cdx индекс может быть не вполне работоспособен. »
|
Ну если архивирование таким образом ни чем не отличается от простого копирования, то я думаю все будет работать.
Раньше приходилось делать это вручную и по этому хочу автоматизировать процесс архивирования.
|
Цитата:
Цитата Fanbeer
Ну если архивирование таким образом ни чем не отличается от простого копирования, »
|
Дело не в том. Перечитайте ещё раз:
Цитата:
Позволяет обрабатывать файлы, открытые для записи другими программами.
Это опасный ключ, так как он разрешает архивировать те файлы, которые в тот же момент могут быть изменены другой программой. Если при этом будет нарушена внутренняя структура заархивированного файла, то программа для его обработки после распаковки такого файла может его не открыть. Используйте этот ключ очень осторожно!
|
Цитата:
Цитата Fanbeer
то я думаю все будет работать. »
|
Вот именно такой архив нужно проверить.
Сам индекс можно перестроить (как верно указывает коллега megaloman). Но что, если в «подвешенном» состоянии окажется какой-нибудь *.dbf? Как правило — жёппа.
|
Цитата:
Цитата Iska
Дело не в том. Перечитайте ещё раз: »
|
Я понимаю что файл во время архивирования может быть занят другим приложением! Разве при обычном копировании файлов из базы не может получиться подобное?
|
Время: 16:35.
© OSzone.net 2001-