Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Поточный бэкап файлов - папок
Goto page 1, 2, 3  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
DoctorIkari



Joined: 28 Feb 2010
Posts: 53
Location: Nihon

Post (Separately) Posted: Sat Apr 03, 2010 21:27    Post subject: Поточный бэкап файлов - папок Reply with quote

Есть команда 1:
xcopy .\%N _%N.bak /y /e /v /c /i /h /r /k /g
копирование папки с переименованием

команда2:
(echo f|xcopy/y/c/h/r/k/g/z %S1 "_%O.%E.bak")
копирование файла с переименованием


Собственно тема: как объединить эти 2 команды, чтобы возможно было бэкапить выделенные файлы и папки?

Возможно, что это будет скрипт...

 !  Avada:
Этой теме лучше быть в Автоматизации. Перенёс.
Back to top
View user's profile Send private message Yahoo Messenger
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Sun Apr 04, 2010 18:52    Post subject: Re: Поточный бэкап файлов - папок Reply with quote

[offtop]
Quote:
(echo f|xcopy/y/c/h/r/k/g/z %S1 "_%O.%E.bak")
XCOPY не понимает списки, будет скопирован только один (первый из выделенных) файл
[/offtop]

Code:
Dim TCS
Set TCS = CreateObject("TCSCRIPT.Helper")
TCS.SendCommand "cm_Copy", False
TCS.SendKeystroke "*.*.bak"
TCS.SendKeystroke "{ENTER}"
Set TCS = Nothing
WScript.Quit
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Sun Apr 04, 2010 19:26    Post subject: Reply with quote

Quote:
XCOPY не понимает списки
Стоит добавить всего одну букву (Xxcopy) - и начинает понимать...
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
DoctorIkari



Joined: 28 Feb 2010
Posts: 53
Location: Nihon

Post (Separately) Posted: Mon Apr 05, 2010 11:46    Post subject: Reply with quote

Скрипт работает, а строку
Code:
TCS.SendKeystroke "*.*.bak"
можно даже упростить
Code:
TCS.SendKeystroke "*.bak"
)
Только вот в чем дело: мне обычно нужно делать бэкапы, чтобы они обитали вверху списка панели. Так сказать, на виду.
НО, при изменении маски на "_*.bak" "проглатывается" 1-й знак.
Т.е. вместо hren'.hz имеем _ren'.hz.bak
Back to top
View user's profile Send private message Yahoo Messenger
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Mon Apr 05, 2010 12:45    Post subject: Reply with quote

DoctorIkari wrote:
можно даже упростить
В выделенном может оказаться несколько одинаковых имён
DoctorIkari wrote:
при изменении маски на "_*.bak" "проглатывается" 1-й знак
В поведении TC хватает подобных "фич"
Нужно писать скрипт, самостоятельно переименовывающий, а не использующий TC
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Mon Apr 05, 2010 13:13    Post subject: Reply with quote

DoctorIkari
Tol!k wrote:
Нужно писать скрипт


Могу написать скрипт, только опиши детально, что конкретно ты хочешь. (Очень не хочется разбираться с xcopy и её ключами.)
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
DoctorIkari



Joined: 28 Feb 2010
Posts: 53
Location: Nihon

Post (Separately) Posted: Mon Apr 05, 2010 13:28    Post subject: Reply with quote

Эммм... а можете, пожалуйста, его состряпать.

Конечно, не обязательно бэкапить при помощи ТК. Важно, чтобы можно было запустить скрипт из панели инструментов Smile
Back to top
View user's profile Send private message Yahoo Messenger
DoctorIkari



Joined: 28 Feb 2010
Posts: 53
Location: Nihon

Post (Separately) Posted: Mon Apr 05, 2010 14:12    Post subject: Reply with quote

Нужно следующее:
выделив несколько папок и файлов, нажав на кнопку, сделать их бэкапы по маске _*.bak (т.е. вначале к копиям приписывается _, а в конце .bak)
Back to top
View user's profile Send private message Yahoo Messenger
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Mon Apr 05, 2010 15:12    Post subject: Reply with quote

Батничек с параметрами %P %S
Code:
@echo off
cd /d %1

:New
if not exist %2 goto :EOF
copy %2 _%2.bak

shift
goto New
Проверил - работает. Только для файлов!
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Mon Apr 05, 2010 15:15    Post subject: Reply with quote

DoctorIkari
vbs-скрипт:
Code:
'======================================================================
' Переименование выделенных файлов\папок -
'   Добавление в начало и конец имени определённого текста

' Параметры:
' {файл-список} {текст в начале} {текст в конце}

' Пример параметров вызова из TC:
' %L "_" ".bak"
'======================================================================
Option Explicit
Dim FSO, FileList, List, F, FF, S1, S2
Set FSO  = CreateObject("Scripting.FileSystemObject")
FileList = WScript.Arguments(0)
S1       = WScript.Arguments(1)
S2       = WScript.Arguments(2)
List     = Split(FSO.OpenTextFile(FileList).ReadAll, vbNewLine)

For Each F In List
  If F <> "" Then
    If FSO.FileExists(F) Then
      Set FF = FSO.GetFile(F)
    End If
    If FSO.FolderExists(F) Then
      Set FF = FSO.GetFolder(F)
    End If
    FF.Name = S1 & FF.Name & S2
    Set FF = Nothing
  End If
Next

Set FSO = Nothing
Wscript.Quit

_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Mon Apr 05, 2010 15:35    Post subject: Reply with quote

Bat-скрипт Wink. Работает и для директорий и для файлов:
Code:
@echo off
cd /d %1
set P=%1

:New
if not exist %2 goto :EOF

if not exist %P%%2\nul goto File

md %P%_%2.bak
copy %P%%2\*.* %P%_%2.bak\*.*
shift
goto New

:File
copy %2 _%2.bak
shift
goto New
Параметры те же %P %S
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
DoctorIkari



Joined: 28 Feb 2010
Posts: 53
Location: Nihon

Post (Separately) Posted: Mon Apr 05, 2010 15:57    Post subject: Reply with quote

Batya, работает как часы, но это ренэймер - нужен бэкапщик файлов/папок
Вахмурка, по
Code:
%P %S
не бэкапит, по
Code:
%P%S
тоже самое
Back to top
View user's profile Send private message Yahoo Messenger
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Mon Apr 05, 2010 16:00    Post subject: Reply with quote

DoctorIkari wrote:
Batya, работает как часы, но это ренэймер - нужен бэкапщик файлов/папок

Хмм... Задумался о своём Smile
Code:
'======================================================================
' Копирование выделенных файлов\папок с
'   добавлением в начало и конец нового имени определённого текста

' Параметры:
' {файл-список} {текст в начале} {текст в конце}

' Пример параметров вызова из TC:
' %L "_" ".bak"
'======================================================================
Option Explicit
Dim FSO, FileList, List, F, S1, S2, Path, Name
Set FSO  = CreateObject("Scripting.FileSystemObject")
FileList = WScript.Arguments(0)
S1       = WScript.Arguments(1)
S2       = WScript.Arguments(2)
List     = Split(FSO.OpenTextFile(FileList).ReadAll, vbNewLine)

For Each F In List
  If F <> "" Then
    Path = FSO.GetParentFolderName(F)
    If FSO.FileExists(F) Then
      Name = FSO.GetFile(F).Name
      FSO.CopyFile F, Path & "\" & S1 & Name & S2
    End If
    If FSO.FolderExists(F) Then
      Name = FSO.GetFolder(F).Name
      If Right(F, 1) = "\" Then F = Left(F, Len(F) - 1)
      FSO.CopyFolder F, Path & "\" & S1 & Name & S2
    End If
  End If
Next

Set FSO = Nothing
Wscript.Quit


Вахмурка
Что-то мне подсказывает, что ты не учёл возможность наличия пробелов в именах и не выполнил условие:
DoctorIkari wrote:
выделив несколько папок и файлов ...

_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
DoctorIkari



Joined: 28 Feb 2010
Posts: 53
Location: Nihon

Post (Separately) Posted: Mon Apr 05, 2010 16:13    Post subject: Reply with quote

Batya, а теперь точно часы xD
Сенк
Back to top
View user's profile Send private message Yahoo Messenger
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Mon Apr 05, 2010 17:42    Post subject: Reply with quote

2DoctorIkari
Параметры правильные - нужен пробел. См. пост от Batya и мой ответ:
Batya wrote:
Что-то мне подсказывает, что ты не учёл возможность наличия пробелов в именах и не выполнил условие
Первое: действительно, не думал об этом, но сейчас проверил - работает. Второе - учел и только что проверил.

Добавлено
А, нашел косяк - пробелы в именах директорий не обрабатывает (файлов - легко). Поигравшись с кавычками, можно побороть. Ну, раз клиент и так доволен, поленюсь.
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page 1, 2, 3  Next
Page 1 of 3

 
Jump to:  
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