View previous topic :: View next topic |
Author |
Message |
helb
Joined: 08 Oct 2014 Posts: 57
|
(Separately) 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 |
|
Back to top |
|
 |
Avada

Joined: 01 Aug 2008 Posts: 10415 Location: Россия, Саратов
|
(Separately) Posted: Thu Oct 16, 2014 16:19 Post subject: |
|
|
helb
Тут уже в своё время намекали (и я с этим совершенно согласен), что при выкладывании скриптов в общий доступ пояснения в шапке лучше давать по-русски. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
 |
helb
Joined: 08 Oct 2014 Posts: 57
|
(Separately) Posted: Thu Oct 16, 2014 16:43 Post subject: |
|
|
Ок. Могу вообще ее не копировать из оригинального файла — скриптов вообще без шапки и пояснений внутри на форуме полно :) |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Oct 16, 2014 17:21 Post subject: |
|
|
Не полно, но есть, где это не является ключевым моментом, где, например, нет параметров. Как правило, это маленькие скрипты. Во всех остальных случаях мы придерживаемся условий и рекомендаций из памятки подфорума. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
helb
Joined: 08 Oct 2014 Posts: 57
|
(Separately) Posted: Tue Nov 11, 2014 15:22 Post subject: |
|
|
То же на powershell, только вдобавок сохраняет даты модификации у папок при копировании.
Запускать командой вида “powershell <имя.ps1> <параметры>”. PS должен быть установлен (актуально только для Win XP), и должно быть разрешено выполнение скриптов (единовременная команда “Set-ExecutionPolicy RemoteSigned” в среде PS)
toggle-backup.ps1:
Code: | <# Toggle backup (by helb)
If entry in the list has no ‘ext’ suffix(extension) copy adding it
if entry already ends on ‘ext’ copy removing it
e.g. file.txt > file.txt.t
Parameters: /r /f listfile
/r - rename instead of copy, /f - force overwrite (both optional), listfile - UTF-8 encoded
Total Commander list parameter: %UL
Добавляет к имени каждого выделенного объекта указанный в начале скрипта суффикс (.t) или совершает обратное действие, если он уже есть.
По умолчанию будет копировать, с опцией /r — переименовывать, опция /f для перезаписи без запроса.
Использование: [/r] [/f] <файл-список в UTF-8 (%UL)>
#>
$ext = ".t"
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
function msgBx($text, $title, $btns = 0) {
return [System.Windows.Forms.MessageBox]::Show($text, $title, $btns)
}
if ($args.length -lt 1) { msgBx "No parameters." "Error"; return }
foreach ($a in $args) {
if ($a -eq "/r") { $rename = $true }
elseif ($a -eq "/f") { $confirmed = "Yes" }
else { $list = [environment]::ExpandEnvironmentVariables($a) }
}
if (!(test-path -literalPath $list)) { msgBx "List file not found." "Warning"; return }
else {
$filelist = get-content $list
foreach ($name in $filelist) {
if ($name.substring($name.length-1, 1) -eq "\") { $name = $name.substring(0, $name.length-1) }
if (test-path -literalPath $name) {
if ($name.substring($name.length-$ext.length, $ext.length) -eq $ext) {
$newname = $name.substring(0, $name.length-$ext.length)
}
else { $newname = $name + $ext }
if ((test-path -literalPath $newname) -and !($confirmed)) {
$confirmed = msgBx "Name conflict. Overwrite all? (‘No’ to skip all)" "Confirm" YesNoCancel
if ($confirmed -eq "Cancel") { break }
}
if ((test-path -literalPath $newname) -and $confirmed -eq "Yes" -or !(test-path -literalPath $newname)) {
if (test-path -literalPath $newname) { remove-item $newname -recurse }
if ($rename) {
move-item -literalPath $name -destination $newname
}
else {
$newfiles = copy-item -literalPath $name -destination $newname -passThru -recurse
if ($newfiles) {
$newfiles | where { $_.PSIsContainer } | foreach {
$fname = $_.FullName.replace($newname, $name)
$_.LastWriteTime = (get-item -literalPath $fname -force).LastWriteTime
}
}
}
}
}
}
}
|
|
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|