Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Старожил


Сообщения: 426
Благодарности: 108

Профиль | Отправить PM | Цитировать


1. Использовать служебные шары типа "C$" не красиво, но может в данном случае разумно - 99% пользователей не смогут отключить шару.
2. Формат даты ДДММГГГГ хорош только когда таких каталогов не больше десятка-другого. В остальных случаях гораздо удобнее использовать дату в формате YYYYMMDD. Как-нибудь попробуйте и убедитесь в этом (в батнике генерация даты в этом формате имеется, надо только ее включить взамен Вашего варианта)
3. В списке копируемых ресурсов каталоги не должны заканчиваться символом "\", иначе ошибка гарантирована (но можно добавить операцию проверки)
4. Любой бэкап должен вести лог-файл. Подредактируйте его внешний вид под себя.

Код: Выделить весь код
@echo off
SetLocal EnableDelayedExpansion

rem Дата в формате YYYY-MM-DD для региона "Россия"
rem set D=%date:~6,4%-%date:~3,2%-%date:~0,2%

rem Дата в формате DDMMYYYY для региона "Россия"
set D=%date:.=%

rem Размещение и имя файла со списком копируемых данных
set List=C:\BackUp.lst

rem Для каталога Бэкапа нужно указать абсолютный путь
set BackUp=E:\BackUp\

rem Префикс для названия папок компьютеров, дописывается перед именем компа
set Pref=Backup_

set Log=%~dpn0.log

echo.>>%Log%
echo %date% %time% ==== Запуск процедуры копирования ====>>%Log%
if not Exist %List% (
echo Отредактируйте список с путями копируемых данных в файле %List%
echo # Это коментарий>%List%
echo.>>%List%
echo # А это сетевый пути для бэкапа:>>%List%
echo \\PC1\C$\Folder1>>%List%
echo \\PC2\D$\Folder\file*.txt>>%List%
echo Список для копирования пуст, создан пример, см: %List%>>%Log%
echo.>>%Log%
exit
)

rem переход на диск с бэкапом
%BackUp:~0,2%
echo %CD%>>%Log%

for /F "usebackq eol=# tokens=1* delims=\" %%P in ("%List%") do (
cd %BackUp%
if not exist %Pref%%%P md %Pref%%%P
cd %Pref%%%P
if not exist %D% md %D%
cd %D%
md %%Q
cd %%Q
title Копирование \\%%P\%%Q
set Txt=!date! !time! Копирование \\%%P\%%Q
rem Если подкаталоги копировать не надо, то убираем ключ "/S".
xcopy \\%%P\%%Q /C /Q /G /H /K /Y /O /S
set Err=!ErrorLevel!
if !Err!==0 (set Txt=!Txt! прошло успешно) else (set Txt=!Txt! закончилось с ошибкой N!Err!)
echo !Txt!>>%Log%
)
ЗЫ: В скрипте включена опция "EnableDelayedExpansion" - из-за этого использование символов "!" в путях ЗАПРЕЩЕНО!

Последний раз редактировалось NiOl, 30-07-2009 в 19:53. Причина: постскриптум

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:50, 30-07-2009 | #4