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

Ответить
Аватара пользователя
bootsy

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

Сообщение bootsy »

Доброе время суток!

...помогите новичку

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

заранее благодарен
Аватара пользователя
Elven

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

Сообщение Elven »

Есть вариант, имхо, попроще: внести скрипт в шедуллер и создать два триггера "среда" и "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!
))
Аватара пользователя
Iska

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

Сообщение Iska »

Код:

Код: Выделить всё

@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 /?)
CMD/BAT - [решено] резервное копирование содержимого почтовой папки при выходе пользователя из системы




Без «usebackq» как раз нужен прямой.




Цитата Elven:



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




Тоже неверное заключение.
Аватара пользователя
Гуллипут

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

Сообщение Гуллипут »

Я думаю, что участок от 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
Аватара пользователя
bootsy

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

Сообщение bootsy »

Ребят! заработало ).. как комбинация всех ваших предложений.

Спасибо каждому отозвавшемуся!

Код получился такой:



Код:

Код: Выделить всё

@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% получал и имя этой папки и подставлял в скрипт...
Ответить

Вернуться в «Скриптовые языки администрирования Windows»