Показать полную графическую версию : [решено] создать и хранить несколько версий файла
В общем, я со своим провайдером (не буду называть имя) замучался тем, что когда заканчивается срок периода услуг интернет, то любой открытый адрес в браузере заменяется на страницу что-то типа "Закончился расчетный период, пополните счет на такую-то сумму".
Сам пользуюсь 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)
kiripanda
11-10-2011, 13:59
pushd c:\Opera\profile\sessions
for /f "skip=1 delims=." %%d in ('wmic OS Get LocalDateTime') do copy /b autosave.win autosave_%%d.win
for /f "skip=8" %%f in ('dir /b/o-d/tc autosave_??????????????.win') do del /q %%f
popd
Цитировать »
Назначение всех строк, кроме третьей, понятно, и в ней ошибка, т.к. она ни как не отрабатывает.
for /f "skip=8" %%f in ('dir /b/o-d/tc ') do del /q %%f
Если правильно я понял, dir должна показать файлы и отсортировать по дате создания (начиная со старого)? А for - поудалять?
Напомню: в папке должно остаться несколько последних версий файла autosave.win (например 8).
kiripanda
11-10-2011, 18:08
что значит "ни как не отрабатывает" ?
должно остаться 8 самых новых по дате создания копий с именами в формате autosave_YYYYMMDDhhmmss.win
*в папке Opera\profile\sessions
wmic OS Get LocalDateTime
что выдаёт ?
kiripanda, он вроде как у всех должен один и тот же формат даты выдавать.
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
Smirnovi
27-09-2012, 23:15
часто слетали вкладки последнее время паэтому наваял вот
' 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
первое код на VBScript - для детекта изменений - второе собственно сам батник бекапа
скрипт пока сыроват - но может использоватся уже
кидаем в папочку %APPDATA%\Opera\Opera\sessions\
оба файла и ярлык на первый в автозагрузку
и удобно получаем историю с модификациями вкладок :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.