|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] резервное копирование содержимого почтовой папки при выходе пользователя из системы |
|
CMD/BAT - [решено] резервное копирование содержимого почтовой папки при выходе пользователя из системы
|
Новый участник Сообщения: 2 |
Доброе время суток!
...помогите новичку пытаюсь написать батник который раз в неделю (например только по средам) копирует все *.dbx файлы из папки почтовика в другую в момент выхода пользователя из системы и завершения работы. Написал следующий скрипт: @echo off rem ####резервное копирование почтовой базы rem #### определяю переменную для дня недели SET runday=3 echo %runday% rem #### получаю значение дня недели и вытаскиваю из него вторую строчку с номером дня и записываю итог в переменную wd FOR /F "SKIP=1" %%i IN ('wmic path win32_LocalTime get DayOfWeek') DO SET wd=%%i echo %wd% rem #### сравниваю значения в переменных и в случае равенства файлы копируются IF /i %wd%==%runday% goto mark1 ELSE goto mark2 SET OEDBpath="C:\Documents and Settings\User\Local Settings\Application Data\Identities\{3E343025-4670-4E7C-A679-E634FB42B2AA}\Microsoft\Outlook Express" SET BackupDRV=w: SET BackupDir=OutlookBackup :mark1 rem #### создаю при необходимости папку и копирую туда файлы IF NOT EXIST %BackupDRV%\%BackupDir% md %BackupDRV%\%BackupDir% xcopy %OEDBPath%\*.dbx %BackupDRV%\%BackupDir% /D /F /Y :mark2 заранее благодарен |
|
Отправлено: 16:02, 25-10-2013 |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать Есть вариант, имхо, попроще: внести скрипт в шедуллер и создать два триггера "среда" и "logout" или использовать какой-нибудь аналог эффектор сейвера.
Но если делать так, то две ошибки. во-первых ты используешь в for прямые апострофы, а не обратные (читай FOR /?), и во-вторых - не учитываешь, что после вывода дня недели выводится пустая строка. вот рабочий вариант (вместо echo Friday! вставляем то что нужно сделать, ну и пятерку тройкой заменяем) |
Отправлено: 17:58, 25-10-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать @echo off setlocal enableextensions enabledelayedexpansion set OEDBpath="%UserProfile%\Local Settings\Application Data\Identities\{3E343025-4670-4E7C-A679-E634FB42B2AA}\Microsoft\Outlook Express" set BackupDRV=w: set BackupDir=OutlookBackup set /a iRunDay = 3 for /f "usebackq delims=" %%i in ( `wmic.exe path win32_LocalTime get DayOfWeek /value ^| find.exe /i "DayOfWeek"` ) do set i%%i if %iRunDay% equ %iDayOfWeek% ( if not exist "%BackupDRV%\%BackupDir%\." md "%BackupDRV%\%BackupDir%" xcopy.exe /d /f /y "%OEDBPath%\*.dbx" "%BackupDRV%\%BackupDir%\" ) endlocal exit /b 0 Цитата Elven:
Цитата Elven:
|
||
Отправлено: 08:03, 26-10-2013 | #3 |
Пользователь Сообщения: 70
|
Профиль | Отправить PM | Цитировать Я думаю, что участок от IF до mark1 вообще никогда не выполнится !
Поэтому так: IF /i not %wd%==%runday% goto mark2 SET OEDBpath="C:\Documents and Settings\User\Local Settings\Application Data\Identities\{3E343025-4670-4E7C-A679-E634FB42B2AA}\Microsoft\Outlook Express" SET BackupDRV=w: SET BackupDir=OutlookBackup rem #### создаю при необходимости папку и копирую туда файлы IF NOT EXIST %BackupDRV%\%BackupDir% md %BackupDRV%\%BackupDir% xcopy %OEDBPath%\*.dbx %BackupDRV%\%BackupDir% /D /F /Y :mark2 |
Отправлено: 23:29, 26-10-2013 | #4 |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать Ребят! заработало ).. как комбинация всех ваших предложений.
Спасибо каждому отозвавшемуся! Код получился такой: @echo off rem ####резервное копирование почтовой базы rem #### определяю переменную для дня недели SET /A runday=3 SET OEDBpath="C:\Documents and Settings\User\Local Settings\Application Data\Identities\{3E343025-4670-4E7C-A679-E634FB42B2AA}\Microsoft\Outlook Express" SET BackupDRV=w: SET BackupDir=OutlookBackup echo day of week to run:%runday% rem #### получаю значение дня недели и вытаскиваю из него вторую строчку с номером дня и записываю итог в переменную wd FOR /F "SKIP=1" %%i IN ('wmic path win32_LocalTime get DayOfWeek') DO SET /A wd=%%i echo current day:%wd% rem #### сравниваю значения в переменных и в случае равенства файлы копируются IF /I %wd%==%runday% goto mark1 IF /I %wd% NEQ %runday% goto mark2 :mark1 rem #### создаю при необходимости папку и копирую туда файлы IF NOT EXIST %BackupDRV%\%BackupDir% md %BackupDRV%\%BackupDir% xcopy %OEDBPath%\*.dbx %BackupDRV%\%BackupDir% /D /F /Y :mark2 Пришлось, как написал Iska, использовать ключик /A в SET т.к. необходимо было указать что в переменной сидит число , а не текст... иначе просто сравнение "NEQ" и"==" не работало. ЗЫ Хочется сделать скрипт универсальным... для каждого пользователя. Т.к. папка типа - \{3E343025-4670-4E7C-A679-E634FB42B2AA}\ у каждого своя. Попробую поломать голову над тем как сделать так чтобы скрипт в зависимости от %username% получал и имя этой папки и подставлял в скрипт... |
|
Отправлено: 22:01, 28-10-2013 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Копирование из сетевой папки с вводом пользователя и пароля. | grom_nv | Скриптовые языки администрирования Windows | 5 | 27-05-2016 17:47 | |
2008 R2 - Копирование содержимого папки при помощи ГП | SANIOK_AV | Windows Server 2008/2008 R2 | 6 | 23-03-2013 22:34 | |
Debian/Ubuntu - Резервное копирование системы | exo | Общий по Linux | 18 | 03-02-2013 21:40 | |
Загрузка - [решено] При выходе системы из спящего режима требует ввести имя пользователя и пароль | DG1979 | Microsoft Windows 7 | 2 | 11-08-2011 16:07 | |
2008 R2 - Резервное копирование определенной папки | Hrust2010 | Windows Server 2008/2008 R2 | 14 | 27-01-2011 16:00 |
|