|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] создать и хранить несколько версий файла |
|
CMD/BAT - [решено] создать и хранить несколько версий файла
|
Новый участник Сообщения: 9 |
Профиль | Отправить PM | Цитировать
В общем, я со своим провайдером (не буду называть имя) замучался тем, что когда заканчивается срок периода услуг интернет, то любой открытый адрес в браузере заменяется на страницу что-то типа "Закончился расчетный период, пополните счет на такую-то сумму".
Сам пользуюсь Opera с включенной настройкой "Продолжать с места разединения", в работе у меня открыто около 10-50 владок и при запуске все они теряют адреса, точнее меняются на вышеописанный (кнопка назад не активна, я так понимаю что это срабатывает не перенаправление). Угадать и следить за сроком окончания услуги интернет времени нет Но есть в Opera файл автосохранения последней сессии перед выходом "%APPDATA%\Opera\Opera\sessions\autosave.win", вот его то я решил и бэкапить. Но не просто перезаписывать последней версией, а создавать две и больше копий. Задача: создать и хранить несколько последних копий файла. Вот набросал такой код, может кого заинтересует. Но мне интересно можно ли его упростить? rem задание расположений папки сессий Opera, хранящей файл autosave.win set opappdatases=%APPDATA%\Opera\Opera\sessions rem Счетчик, создающий 8 последних файлов, потом сбрасывается до 0 if not exist "%opappdatases%\*.tmp" ( echo.>"%opappdatases%\%filenautos%.tmp" ) for %%i in ("%opappdatases%\*.tmp") do set filenautos=%%~ni set filenautosold=%filenautos% :opcount if exist "%opappdatases%\%filenautos%.tmp" ( set /A filenautos+=1 goto :opcount ) else ( echo.>"%opappdatases%\%filenautos%.tmp" del /Q "%opappdatases%\%filenautosold%.tmp" ) rem здесь указано максимально возможное имя файла (8) if exist "%opappdatases%\8.tmp" ren "%opappdatases%\8.tmp" 0.tmp rem Бэкап файла последней сессии copy /V /Y "%opappdatases%\autosave.win" "%opappdatases%\autosave(%filenautos%).win">nul&& echo файл autosave(%filenautos%).win скопирован...ОК Вложение: содержит тот же код, переименовать в *.bat (Кодировка 866) |
|
Отправлено: 11:54, 11-10-2011 |
Старожил Сообщения: 352
|
Профиль | Отправить PM | Цитировать |
Отправлено: 13:59, 11-10-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Цитата kiripanda:
Если правильно я понял, dir должна показать файлы и отсортировать по дате создания (начиная со старого)? А for - поудалять? Напомню: в папке должно остаться несколько последних версий файла autosave.win (например 8). |
|
Отправлено: 17:39, 11-10-2011 | #3 |
Старожил Сообщения: 352
|
Профиль | Отправить PM | Цитировать |
Отправлено: 18:08, 11-10-2011 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать kiripanda, он вроде как у всех должен один и тот же формат даты выдавать.
|
|
Отправлено: 20:08, 11-10-2011 | #5 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать kiripanda, прошу прощения, не сразу понял что делает та строка . Я протестил, создав только 4 файла, а нужно было 8 (skip=8).
Выводит список нужных файлов, отсортировав их по дате, новые при этом вверху списка, отступает 8 строк и удаляет все остальное. при этом остаются в папке все *.win и некоторые (точнее восемь) формата autosave_??????????????.win. Например: autosave_20111013113333.win autosave_20111013113322.win autosave_20111013113041.win autosave_20111013113037.win autosave_20111013113033.win autosave_20111013113023.win autosave_20111013112941.win autosave_20111013112339.win autosave_20111013112135.win - удалится autosave_20111013112114.win - удалится autosave_20111013112105.win - удалится Итог в моем батнике (866): @echo off title Запуск Opera mode con cols=40 lines=10 set opappdatases=%APPDATA%\Opera\Opera\sessions :: проверяем наличие интернет ping -n 1 ukr.net>nul if %errorlevel%==0 (goto :startopera) ping -n 1 google.com.ua>nul if %errorlevel%==0 (goto :startopera) else (goto :noinet) echo %errorlevel% pause exit :startopera :: Проверяем наличие копируемого файла if not exist "%opappdatases%\autosave.win" ( color 0C& echo Не найден файл autosave.win& pause>nul& exit ) :: Бэкап файла последней сессии pushd "%opappdatases%" for /f "skip=1 delims=." %%d in ('wmic OS Get LocalDateTime') do copy /B /V autosave.win autosave_%%d.win for /f "skip=8" %%f in ('dir /b/o-d/tc autosave_??????????????.win') do del /q %%f popd echo бэкап autosave.win создан...ОК echo. tasklist|find /I "opera.exe">nul if %errorlevel%==0 (goto :operastarted) color 0A echo Opera будет запущена ping -n 3 localhost>nul start "" "C:\Program Files\Opera\opera.exe" exit :noinet color 0C echo. echo нету интернета set $errorinet=%temp%\rar_finish.vbs echo Set WshShell = WScript.CreateObject("WScript.Shell")>"%$errorinet%" echo WshShell.Popup "═хЄє шэЄхЁэхЄр, яЁютхЁ№Єх ёюхфшэхэшх.", 60, "┬эшьрэшх!", 16>>"%$errorinet%" CScript /Logo "%$errorinet%">nul erase /Q /F "%$errorinet%">nul exit :operastarted cls color 0D echo. echo Opera уже запущена set $operastarted=%temp%\rar_finish.vbs echo Set WshShell = WScript.CreateObject("WScript.Shell")>"%$operastarted%" echo WshShell.Popup "Opera єцх чряє∙хэр!", 60, "┬эшьрэшх!", 64>>"%$operastarted%" CScript /Logo "%$operastarted%">nul erase /Q /F "%$operastarted%">nul exit |
Отправлено: 13:47, 13-10-2011 | #6 |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать часто слетали вкладки последнее время паэтому наваял вот
' VBScript source code Set objShell=Createobject("Wscript.Shell") strFile = objShell.ExpandEnvironmentStrings("%APPDATA%\Opera\Opera\sessions\autosave.win") strFileSlash = Replace(strFile, "\", "\\") intInterval = "2" strDrive = "C:" strFilename = "autosave" strExtension = "win" strComputer = "." ' Connect to WMI Set objWMIService = GetObject( "winmgmts:" &_ "{impersonationLevel=impersonate}!\\" &_ strComputer & "\root\cimv2" ) ' The query string strQuery = _ "Select * From __InstanceOperationEvent" _ & " Within " & intInterval _ & " Where Targetinstance Isa 'CIM_DataFile'" _ & " And TargetInstance.Name='" & strFileSlash & "'"_ ' & " And TargetInstance.Drive='" & strDrive & "'"_ ' & " And TargetInstance.Path='" & strFolder & "'" _ '& " And TargetInstance.Filename='" & strFilename & "'" _ '& " And TargetInstance.Extension='" & strExtension & "'" _ ' Execute the query Set colEvents = _ objWMIService. ExecNotificationQuery (strQuery) ' The loop Set objShell = WScript.CreateObject("WScript.Shell") Do ' Wait for the next event ' Get SWbemEventSource object ' Get SWbemObject for the target instance Set objEvent = colEvents.NextEvent() Set objTargetInst = objEvent.TargetInstance ' Check the class name for SWbemEventSource ' It cane be one of the following: ' - __InstanceCreationEvent ' - __INstanceDeletionEvent ' - __InstanceModificationEvent Return = objShell.Run("3.bat", 0, true) Select Case objEvent.Path_.Class ' If it is file creation or deletion event ' just echo the file name Case "__InstanceCreationEvent" WScript.Echo "Created: " & objTargetInst.Name Case "__InstanceDeletionEvent" WScript.Echo "Deleted: " & objTargetInst.Name ' If it is file modification event, ' compare property values of the target and previous ' instance and echo the properties that have changed ' Case "__InstanceModificationEvent" ' ' Set objPrevInst = objEvent.PreviousInstance ' ' For Each objProperty In objTargetInst.Properties_ ' If objProperty.Value <> _ ' objPrevInst.Properties_(objProperty.Name) Then ' WScript.Echo "Changed: " _ ' & objTargetInst.Name ' WScript.Echo "Property: " _ ' & objProperty.Name ' WScript.Echo "Previous value: " _ ' & objPrevInst.Properties_(objProperty.Name) ' WScript.Echo "New value: " _ ' & objProperty.Value ' WScript.Echo ' ' End If ' Next End Select Loop set opappdatases=%APPDATA%\Opera\Opera\sessions pushd %opappdatases% if not exist "%opappdatases%\autosave.win" goto :exit if not exist "%opappdatases%\autosave.win.bak" goto :exit for /f "skip=1 delims=." %%d in ('wmic OS Get LocalDateTime') do copy /b /V /Y autosave.win autosave_%%d.win for /f "skip=27" %%f in ('dir /b/o-d/tc autosave_??????????????.win') do del /q %%f :exit popd скрипт пока сыроват - но может использоватся уже кидаем в папочку %APPDATA%\Opera\Opera\sessions\ оба файла и ярлык на первый в автозагрузку и удобно получаем историю с модификациями вкладок |
Отправлено: 23:15, 27-09-2012 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Копирование файла на несколько IP | Moksar | Скриптовые языки администрирования Windows | 4 | 14-02-2018 20:35 | |
Копирование файла на несколько IP | Moksar | AutoIt | 2 | 12-06-2011 16:40 | |
[решено] Как создать несколько Tab в одном окне? | proxy | AutoIt | 2 | 06-04-2009 21:48 | |
>100m/LongLink - Помогите создать беспроводную сеть на несколько км | Illusionist | Сетевое оборудование | 2 | 26-06-2008 21:39 | |
Mandriva/Mandrake - Как создать несколько интернет подключений в Mandrive | macless | Общий по Linux | 8 | 06-11-2007 17:32 |
|