helb
|
Posted: Thu Oct 16, 2014 16:13 Post subject: Создание/восстановление временного бэкапа в текущей папке |
|
|
Давно завел практику по-быстрому создавать временные копии (или переименовывать) файлов и папок добавляя расширение “.t”. Примерно таким образом: Shift+F5(F6) → End → .t → Enter и назад Shift+F5(F6) → End → Backspace×2 → Enter. Маска “*.t?” у меня подсвечена сиреневым, так что такие копии сразу заметны.
Надоело аж целых шесть нажатий по всей клавиатуре делать, сделал скрипт и повесил на F12 и Ctrl+F12 :)
Добавляет к имени каждого выделенного объекта указанный в начале скрипта суффикс (.t) или совершает обратное действие, если он уже есть. По умолчанию будет копировать, с опцией /r — переименовывать, опция /f для перезаписи без запроса.
Использование: [/r] [/f] <файл-список в UTF-16 (%WL)>
toggle-backup.vbs:
Code: | '==========================================================
' Toggle backup (by helb)
'Добавляет к имени каждого выделенного объекта указанный в начале скрипта суффикс (.t) или совершает обратное действие, если он уже есть.
'По умолчанию будет копировать, с опцией /r — переименовывать, опция /f для перезаписи без запроса.
'Использование: [/r] [/f] <файл-список в UTF-16 (%WL)>
'==========================================================
Option Explicit
dim ext : ext = ".t" 'edit this variable for your own suffix
dim FSO, fobj, name, list, F, confirmed, rename
set FSO = CreateObject("Scripting.FileSystemObject")
if WScript.Arguments.length = 0 then
WScript.Echo("No parameters specified")
WScript.Quit
end if
for each F in WScript.Arguments
if F = "/r" then
rename = true
elseif F = "/f" then
confirmed = vbYes
elseif FSO.FileExists(F) then
List = F
end if
next
for each F in Split(FSO.OpenTextFile(List, 1, false, -1).ReadAll, vbNewLine)
if F <> "" then
set fobj = getObj(F)
if not fobj is nothing then
name = getNewName(fobj.Path)
if objExists(name) > 0 and confirmed = Empty then
confirmed = MsgBox("Name conflict. Overwrite all? (“No” to skip all)", vbExclamation + vbYesNoCancel, "Confirm")
if confirmed = vbCancel then exit for
end if
if objExists(name) > 0 and confirmed = vbYes or objExists(name) = 0 then
if rename then
if objExists(name) > 0 then getObj(name).Delete
fobj.Move(name)
else
fobj.Copy(name)
end if
end if
end if
end if
next
function getObj(fl)
if FSO.FileExists(fl) then
set getObj = FSO.GetFile(fl)
elseif FSO.FolderExists(fl) then
set getObj = FSO.GetFolder(fl)
else
set getObj = nothing
end if
end function
'0=not exists, 1=is file, 2=is folder
function objExists(name)
if FSO.FileExists(name) then
objExists = 1
elseif FSO.FolderExists(name) then
objExists = 2
else
objExists = 0
end if
end function
function getNewName(name)
if Right(name, Len(ext)) = ext then getNewName = Left(name, Len(name) - Len(ext)) else getNewName = name & ext
end function |
Last edited by helb on Thu Oct 16, 2014 16:28; edited 1 time in total |
|