Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] резервное копирование содержимого почтовой папки при выходе пользователя из системы

Ответить
Настройки темы
CMD/BAT - [решено] резервное копирование содержимого почтовой папки при выходе пользователя из системы

Новый участник


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

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


Доброе время суток!
...помогите новичку
пытаюсь написать батник который раз в неделю (например только по средам) копирует все *.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
В итоге скрипт выполняет копирование при запуске в любой день (т.е. при любом значении %runday%). Он полностью игнорирует мои попытки использовать оператор IF при сравнении двух переменных %wd% и %runday%. Братцы! что я делаю неправильно? где ошибка ткните носом... плиз
заранее благодарен

Отправлено: 16:02, 25-10-2013

 

Аватара для Elven

Ветеран


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

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


Есть вариант, имхо, попроще: внести скрипт в шедуллер и создать два триггера "среда" и "logout" или использовать какой-нибудь аналог эффектор сейвера.
Но если делать так, то две ошибки.
во-первых ты используешь в for прямые апострофы, а не обратные (читай FOR /?), и во-вторых - не учитываешь, что после вывода дня недели выводится пустая строка.

вот рабочий вариант (вместо echo Friday! вставляем то что нужно сделать, ну и пятерку тройкой заменяем)
Код: Выделить весь код
@echo off
FOR /F "usebackq" %%i IN (`wmic path win32_LocalTime get DayOfWeek ^| find "5"`) DO (
if errorlevel 1 (
echo Friday!
))
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:58, 25-10-2013 | #2



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

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


Ветеран


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

Профиль | Отправить 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:
во-первых ты используешь в for прямые апострофы, а не обратные (читай FOR /?) »
Без «usebackq» как раз нужен прямой.


Цитата Elven:
после вывода дня недели выводится пустая строка. »
Тоже неверное заключение.
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:03, 26-10-2013 | #3


Пользователь


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

Профиль | Отправить 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
Благодарности: 0

Профиль | Отправить 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
возможно чуток не элегантно (топорно) с оператором IF ... но все же ))))
Пришлось, как написал Iska, использовать ключик /A в SET т.к. необходимо было указать что в переменной сидит число , а не текст... иначе просто сравнение "NEQ" и"==" не работало.

ЗЫ Хочется сделать скрипт универсальным... для каждого пользователя. Т.к. папка типа - \{3E343025-4670-4E7C-A679-E634FB42B2AA}\ у каждого своя. Попробую поломать голову над тем как сделать так чтобы скрипт в зависимости от %username% получал и имя этой папки и подставлял в скрипт...

Отправлено: 22:01, 28-10-2013 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] резервное копирование содержимого почтовой папки при выходе пользователя из системы

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход