Поточный бэкап файлов - папок

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
DoctorIkari
Сообщения: 53
Зарегистрирован: Вс фев 28, 2010 10:44
Откуда: Nihon
Контактная информация:

Поточный бэкап файлов - папок

Сообщение DoctorIkari »

Есть команда 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 команды, чтобы возможно было бэкапить выделенные файлы и папки?

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

[mod="Avada"]Этой теме лучше быть в Автоматизации. Перенёс.[/mod]
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Re: Поточный бэкап файлов - папок

Сообщение Tol!k »

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

Код: Выделить всё

Dim TCS
Set TCS = CreateObject("TCSCRIPT.Helper")
TCS.SendCommand "cm_Copy", False
TCS.SendKeystroke "*.*.bak"
TCS.SendKeystroke "{ENTER}"
Set TCS = Nothing
WScript.Quit
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

XCOPY не понимает списки
Стоит добавить всего одну букву (Xxcopy) - и начинает понимать...
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
DoctorIkari
Сообщения: 53
Зарегистрирован: Вс фев 28, 2010 10:44
Откуда: Nihon
Контактная информация:

Сообщение DoctorIkari »

Скрипт работает, а строку

Код: Выделить всё

TCS.SendKeystroke "*.*.bak"
можно даже упростить

Код: Выделить всё

TCS.SendKeystroke "*.bak"
)
Только вот в чем дело: мне обычно нужно делать бэкапы, чтобы они обитали вверху списка панели. Так сказать, на виду.
НО, при изменении маски на "_*.bak" "проглатывается" 1-й знак.
Т.е. вместо hren'.hz имеем _ren'.hz.bak
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

DoctorIkari писал(а):можно даже упростить
В выделенном может оказаться несколько одинаковых имён
DoctorIkari писал(а):при изменении маски на "_*.bak" "проглатывается" 1-й знак
В поведении TC хватает подобных "фич"
Нужно писать скрипт, самостоятельно переименовывающий, а не использующий TC
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

DoctorIkari
Tol!k писал(а):Нужно писать скрипт
Могу написать скрипт, только опиши детально, что конкретно ты хочешь. (Очень не хочется разбираться с xcopy и её ключами.)
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
DoctorIkari
Сообщения: 53
Зарегистрирован: Вс фев 28, 2010 10:44
Откуда: Nihon
Контактная информация:

Сообщение DoctorIkari »

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

Конечно, не обязательно бэкапить при помощи ТК. Важно, чтобы можно было запустить скрипт из панели инструментов :)
Аватара пользователя
DoctorIkari
Сообщения: 53
Зарегистрирован: Вс фев 28, 2010 10:44
Откуда: Nihon
Контактная информация:

Сообщение DoctorIkari »

Нужно следующее:
выделив несколько папок и файлов, нажав на кнопку, сделать их бэкапы по маске _*.bak (т.е. вначале к копиям приписывается _, а в конце .bak)
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Батничек с параметрами %P %S

Код: Выделить всё

@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
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

DoctorIkari
vbs-скрипт:

Код: Выделить всё

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

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

' Пример параметров вызова из 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
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Bat-скрипт ;). Работает и для директорий и для файлов:

Код: Выделить всё

@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
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
DoctorIkari
Сообщения: 53
Зарегистрирован: Вс фев 28, 2010 10:44
Откуда: Nihon
Контактная информация:

Сообщение DoctorIkari »

Batya, работает как часы, но это ренэймер - нужен бэкапщик файлов/папок
Вахмурка, по не бэкапит, по тоже самое
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

DoctorIkari писал(а):Batya, работает как часы, но это ренэймер - нужен бэкапщик файлов/папок
Хмм... Задумался о своём :)

Код: Выделить всё

'======================================================================
' Копирование выделенных файлов\папок с
'   добавлением в начало и конец нового имени определённого текста

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

' Пример параметров вызова из 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 писал(а):выделив несколько папок и файлов ...
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
DoctorIkari
Сообщения: 53
Зарегистрирован: Вс фев 28, 2010 10:44
Откуда: Nihon
Контактная информация:

Сообщение DoctorIkari »

Batya, а теперь точно часы xD
Сенк
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

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

Добавлено
А, нашел косяк - пробелы в именах директорий не обрабатывает (файлов - легко). Поигравшись с кавычками, можно побороть. Ну, раз клиент и так доволен, поленюсь.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Ответить