View previous topic :: View next topic |
Author |
Message |
DoctorIkari
Joined: 28 Feb 2010 Posts: 53 Location: Nihon
|
(Separately) Posted: Sat Apr 03, 2010 21:27 Post subject: Поточный бэкап файлов - папок |
|
|
Есть команда 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 |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Sun Apr 04, 2010 18:52 Post subject: Re: Поточный бэкап файлов - папок |
|
|
[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 |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
|
Back to top |
|
|
DoctorIkari
Joined: 28 Feb 2010 Posts: 53 Location: Nihon
|
(Separately) Posted: Mon Apr 05, 2010 11:46 Post subject: |
|
|
Скрипт работает, а строку Code: | TCS.SendKeystroke "*.*.bak" | можно даже упростить Code: | TCS.SendKeystroke "*.bak" | )
Только вот в чем дело: мне обычно нужно делать бэкапы, чтобы они обитали вверху списка панели. Так сказать, на виду.
НО, при изменении маски на "_*.bak" "проглатывается" 1-й знак.
Т.е. вместо hren'.hz имеем _ren'.hz.bak |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Mon Apr 05, 2010 12:45 Post subject: |
|
|
DoctorIkari wrote: | можно даже упростить | В выделенном может оказаться несколько одинаковых имён
DoctorIkari wrote: | при изменении маски на "_*.bak" "проглатывается" 1-й знак | В поведении TC хватает подобных "фич"
Нужно писать скрипт, самостоятельно переименовывающий, а не использующий TC |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Mon Apr 05, 2010 13:13 Post subject: |
|
|
DoctorIkari
Tol!k wrote: | Нужно писать скрипт |
Могу написать скрипт, только опиши детально, что конкретно ты хочешь. (Очень не хочется разбираться с xcopy и её ключами.) _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
DoctorIkari
Joined: 28 Feb 2010 Posts: 53 Location: Nihon
|
(Separately) Posted: Mon Apr 05, 2010 13:28 Post subject: |
|
|
Эммм... а можете, пожалуйста, его состряпать.
Конечно, не обязательно бэкапить при помощи ТК. Важно, чтобы можно было запустить скрипт из панели инструментов |
|
Back to top |
|
|
DoctorIkari
Joined: 28 Feb 2010 Posts: 53 Location: Nihon
|
(Separately) Posted: Mon Apr 05, 2010 14:12 Post subject: |
|
|
Нужно следующее:
выделив несколько папок и файлов, нажав на кнопку, сделать их бэкапы по маске _*.bak (т.е. вначале к копиям приписывается _, а в конце .bak) |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
(Separately) Posted: Mon Apr 05, 2010 15:12 Post subject: |
|
|
Батничек с параметрами %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 |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Mon Apr 05, 2010 15:15 Post subject: |
|
|
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 |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
(Separately) Posted: Mon Apr 05, 2010 15:35 Post subject: |
|
|
Bat-скрипт . Работает и для директорий и для файлов: 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 |
|
|
DoctorIkari
Joined: 28 Feb 2010 Posts: 53 Location: Nihon
|
(Separately) Posted: Mon Apr 05, 2010 15:57 Post subject: |
|
|
Batya, работает как часы, но это ренэймер - нужен бэкапщик файлов/папок
Вахмурка, по не бэкапит, по тоже самое |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Mon Apr 05, 2010 16:00 Post subject: |
|
|
DoctorIkari wrote: | Batya, работает как часы, но это ренэймер - нужен бэкапщик файлов/папок |
Хмм... Задумался о своём
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 |
|
|
DoctorIkari
Joined: 28 Feb 2010 Posts: 53 Location: Nihon
|
(Separately) Posted: Mon Apr 05, 2010 16:13 Post subject: |
|
|
Batya, а теперь точно часы xD
Сенк |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
(Separately) Posted: Mon Apr 05, 2010 17:42 Post subject: |
|
|
2DoctorIkari
Параметры правильные - нужен пробел. См. пост от Batya и мой ответ: Batya wrote: | Что-то мне подсказывает, что ты не учёл возможность наличия пробелов в именах и не выполнил условие | Первое: действительно, не думал об этом, но сейчас проверил - работает. Второе - учел и только что проверил.
Добавлено
А, нашел косяк - пробелы в именах директорий не обрабатывает (файлов - легко). Поигравшись с кавычками, можно побороть. Ну, раз клиент и так доволен, поленюсь. _________________ Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон) |
|
Back to top |
|
|
|