Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   XCOPY выборочное копирование файлов. (http://forum.oszone.net/showthread.php?t=308615)

Fanbeer 30-11-2015 21:19 2580186

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

megaloman 30-11-2015 22:58 2580209

Если имена самой папки и её подпапок не начинаются с подчёркивания (кстати, у Вас в задании два подчеркивания - это часом не ошибка, файлы не должны начинаться с двух подчеркиваний?) то так:
Код:

@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 2580215

Спасибо. Я завтра посмотрю точно но возможно файлы и с двумя подчеркиваниями. Если не трудно можете прокомментировать что есть что в этом файле?

Fanbeer 01-12-2015 08:12 2580255

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

Fanbeer 01-12-2015 12:43 2580317

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

Fanbeer 01-12-2015 16:13 2580370

Цитата:

Цитата megaloman
-там файлы только созданные в текущем дне или надо архивировать только файлы текущего дня, или всё что там есть (исключая _) в архив с именем текущей даты? »

Из корневого каталога архивировать все файлы исключая те которые начинаются с ( _ ) и исключая папки которые находятся в этом каталоге.

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

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

megaloman 01-12-2015 17:24 2580378

Из корневого каталога архивировать все файлы исключая те которые начинаются с ( _ ) и исключая папки которые находятся в этом каталоге.
Код:

@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 2580398

Архив получился:) но вот из подкаталога файл за вчерашний день не скопировался!

megaloman 01-12-2015 21:33 2580443

Fanbeer, Естественно, это вторая задача. Уже сделал.

Fanbeer 01-12-2015 23:04 2580484

megaloman, Спасибо огромное, реально выручили, дома попробовал все отлично работает:)

Fanbeer 02-12-2015 08:35 2580534

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

megaloman 02-12-2015 09:08 2580538

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

Fanbeer 02-12-2015 14:08 2580633

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

megaloman 02-12-2015 14:38 2580648

Подозреваю, с zip будет та же проблема. Попробуйте при вызове winrar добавить ключ -dh
-dh (читаем в справочной системе winrar)
Ключ -DH — открывать совместно используемые файлы


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


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

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

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


Пример:

WinRAR a -dh dbf *.dbf

Fanbeer 02-12-2015 16:05 2580691

Ура, все получилось:)

Iska 02-12-2015 18:03 2580749

Цитата:

Цитата Fanbeer
Ура, все получилось »

Fanbeer, а теперь попробуйте восстановить из полученного архива в другом месте и проверить работоспособность :). Подозреваю, что полученный таким образом указанный *.cdx индекс может быть не вполне работоспособен.

megaloman 02-12-2015 18:50 2580764

ИМХО, .cdx можно восстановить, но подозреваю, что при этом и .dbf тоже занят и качество копии базы весьма сомнительна.

Fanbeer 02-12-2015 18:51 2580766

Цитата:

Цитата Iska
Fanbeer, а теперь попробуйте восстановить из полученного архива в другом месте и проверить работоспособность . Подозреваю, что полученный таким образом указанный *.cdx индекс может быть не вполне работоспособен. »

Ну если архивирование таким образом ни чем не отличается от простого копирования, то я думаю все будет работать.

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

Iska 02-12-2015 19:48 2580783

Цитата:

Цитата Fanbeer
Ну если архивирование таким образом ни чем не отличается от простого копирования, »

Дело не в том. Перечитайте ещё раз:
Цитата:

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

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

Цитата Fanbeer
то я думаю все будет работать. »

Вот именно такой архив нужно проверить.

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

Fanbeer 02-12-2015 20:09 2580787

Цитата:

Цитата Iska
Дело не в том. Перечитайте ещё раз: »

Я понимаю что файл во время архивирования может быть занят другим приложением! Разве при обычном копировании файлов из базы не может получиться подобное?


Время: 16:35.

Время: 16:35.
© OSzone.net 2001-