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 

Копирование / перемещение данных по разным путям

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Rustem



Joined: 07 Oct 2009
Posts: 18
Location: Башкортостан

Post (Separately) Posted: Tue Nov 03, 2009 09:52    Post subject: Копирование / перемещение данных по разным путям Reply with quote

Здравствуйте все ! Нужен скрипт для следующей задачи :
Есть несколько источников данных на разных дисках:
«D:\Источник_1\» , «Е:\Источник_2\» , ... , «G:\Источник_N\» .
Внутри них есть куча подкаталогов , файлов .
Нужно в зависимости от того, внутри какого из этих источников данных мы находимся:
1) Скопировать по путям 1 и 2 ( H:\На печать , I:\На архивацию) выделенные папки,файлы. Если ничего не выделено, то копировать файл/папку на которой стоит курсор .
2) Переместить по путям 3 и 4 (K:\Заархивировано , L:\ Передано ) выделенные папки,файлы. Если ничего не выделено, то переместить файл/папку на которой стоит курсор .
3) Скопировать по пути 5 , и переместить по пути 6 выделенные папки,файлы. Если ничего не выделено, копируем и перемещаем файл/папку на которой стоит курсор .
Back to top
View user's profile Send private message
Tol!k



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

Post (Separately) Posted: Mon Nov 09, 2009 22:42    Post subject: Reply with quote

Напиши _три_ разных скрипта/батника, которые по отдельности будут делать каждый свою _одну_ задачу.
Помести их в соответствующие папки, назови одинаково и передавай одинаковые параметры (%L)
Получится, что одна кнопка выполняет разные задачи, в зависимости от открытой папки
Back to top
View user's profile Send private message
Rustem



Joined: 07 Oct 2009
Posts: 18
Location: Башкортостан

Post (Separately) Posted: Tue Nov 10, 2009 09:27    Post subject: Reply with quote

Quote:
Помести их в соответствующие папки ...

В смысле закинуть их в папки-источники ?
Back to top
View user's profile Send private message
Tol!k



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

Post (Separately) Posted: Tue Nov 10, 2009 09:51    Post subject: Reply with quote

Да. Туда, где они должны работать.
А в поле 'Команда' напишешь не D:\путь\скрипт, а просто скрипт
Путь запуска: пусто или папка-источник
Back to top
View user's profile Send private message
Batya



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

Post (Separately) Posted: Tue Nov 10, 2009 10:08    Post subject: Reply with quote

Rustem
А если текущий каталог «D:\Источник_1\Подкаталог_1\», то скрипт\батник должен работать?
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Rustem



Joined: 07 Oct 2009
Posts: 18
Location: Башкортостан

Post (Separately) Posted: Wed Nov 11, 2009 09:07    Post subject: Reply with quote

Batya
Quote:
А если текущий каталог «D:\Источник_1\Подкаталог_1\», то скрипт\батник должен работать?


Да, должен.
Back to top
View user's profile Send private message
Batya



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

Post (Separately) Posted: Wed Nov 11, 2009 12:06    Post subject: Reply with quote

Rustem wrote:
Да, должен.

Тогда вариант Tol!k-а не сработает
Tol!k wrote:
Помести их в соответствующие папки, назови одинаково и передавай одинаковые параметры


vbs-скрипт напишу позже.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
hawk777



Joined: 27 Dec 2008
Posts: 61

Post (Separately) Posted: Sat Nov 14, 2009 23:26    Post subject: Reply with quote

Здравствуйте. как можно в ТК переместить один файл в выделенные папки и подкаталоги (например файл ридми.тхт в папку 1 и все папки что внутри нее)? есть какой нить плагин который упрощает задачу?
Back to top
View user's profile Send private message
Вахмурка



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

Post (Separately) Posted: Sun Nov 15, 2009 00:33    Post subject: Reply with quote

"Переместить" никак! Ибо после первого же перемещения перемещать будет уже нечего. Видимо, имелось в виду "скопировать".
Я вижу два способа. Первый хорош всем, если не слишком трудоемко собрать на одной панели все целевые вкладки. Второй способ: каким-либо образом (например, через m_CopyFullNamesToClip) собрать в текстовом файле имена всех директорий-приемников. Затем простой глобальной заменой добавить в начале каждой строки
Code:
copy c:\my\path\readme.txt
и полученный файл переименовать в нечто.bat и запустить.
Думаю, есть и более изящные решения.
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
hawk777



Joined: 27 Dec 2008
Posts: 61

Post (Separately) Posted: Sun Nov 15, 2009 23:11    Post subject: Reply with quote

Вахмурка
Спасибо товарищ. очень выручили Very Happy
Back to top
View user's profile Send private message
Batya



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

Post (Separately) Posted: Fri Nov 20, 2009 10:56    Post subject: Reply with quote

Rustem wrote:
2) Переместить по путям 3 и 4

Rustem wrote:
3) Скопировать по пути 5 , и переместить по пути 6

Не понял, чем это отличается? Вообще, п. 2 некорректен - как писал Вахмурка для такой же ситуации:
Вахмурка wrote:
"Переместить" никак! Ибо после первого же перемещения перемещать будет уже нечего. Видимо, имелось в виду "скопировать".

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



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

Post (Separately) Posted: Mon Nov 23, 2009 13:21    Post subject: Reply with quote

Rustem wrote:
Здравствуйте все ! Нужен скрипт для следующей задачи :

Code:
'====================================================================================
' Для указанных файлов\папок в зависимости от текущего пути
'   производится копирование или перемещение в заданные папки.
'
' Параметры:
' {файл-список}
'
' Пример параметров при вызове из TC:
' %L
'
' Автор - Batya
'====================================================================================
Option Explicit
Dim FLD
Set FLD = CreateObject("Scripting.Dictionary")
'======== Изменяемые параметры ======================================================
' Массив обрабатываемых папок по шаблону:
'   FLD.Add "{Исходная папка}", Array({Режим}, "Папка 1", ..., "Папка N")
FLD.Add "D:\Источник_1\", Array(0, "H:\На печать", "I:\На архивацию")
FLD.Add "Е:\Источник_2\", Array(1, "K:\Заархивировано", "L:\Передано")
FLD.Add "G:\Источник_N\", Array(1, "M:\Путь 5", "N:\Путь 6")
' где {Режим}:
' 0 - копирование исходной папки в "Папка 1", ..., "Папка N";
' 1 - копирование исходной папки в "Папка 1", ..., "Папка N" с последующим удалением.
'====================================================================================
Dim Mess, FSO, WSH, FF
SetMess
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = CreateObject("WScript.Shell")

'On Error Resume Next
CheckParam:CheckErr
Main:CheckErr
On Error GoTo 0
MessBox Mess(5), 3
Quit 0

Sub Main
  Dim F, lF, Arr, i, IsFolder, lTF
  For Each F In Split(FSO.OpenTextFile(FF).ReadAll, vbNewLine)
    If F <> "" Then
      lF = GetPath(F)
      If Not (FSO.FileExists(lF) Or FSO.FolderExists(lF)) Then Err.Raise vbObjectError + 3, "", _
        Mess(3) & vbNewLine & F
      IsFolder = False
      If FSO.FolderExists(lF) Then IsFolder = True
      Arr = FLD(RootFolder(F, FLD))
      If IsFolder Then
        For i = 1 To UBound(Arr)
          lTF = GetPath(Arr(i))
          If Not FSO.FolderExists(lTF) Then Err.Raise vbObjectError + 4, "", _
            Mess(4) & vbNewLine & Arr(i)
          FSO.CopyFolder lF, lTF & "\"
        Next
        If Arr(0) = 1 Then FSO.DeleteFolder lF
      Else
        For i = 1 To UBound(Arr)
          lTF = GetPath(Arr(i))
          If Not FSO.FolderExists(lTF) Then Err.Raise vbObjectError + 4, "", _
            Mess(4) & vbNewLine & Arr(i)
          FSO.CopyFile lF, lTF & "\"
        Next
        If Arr(0) = 1 Then FSO.DeleteFile lF
      End If
    End If
  Next
End Sub

Sub SetMess
  Set Mess = CreateObject("Scripting.Dictionary")
  With Mess
    .Add 0,  "Копирование\перемещение в зависимости от текущего пути"
    .Add 1,  "Не указаны параметры!"
    .Add 2,  "Файл-список не существует!"
    .Add 3,  "Указанный файл или папка не существует:"
    .Add 4,  "Целевая папка не существует:"
    .Add 5,  "Операция завершена."
  End With
End Sub

Sub CheckParam
  If WScript.Arguments.Count = 0 Then Err.Raise vbObjectError + 1, "", Mess(1)
  FF = GetPath(WScript.Arguments(0))
  If Not FSO.FileExists(FF) Then Err.Raise vbObjectError + 2, "", Mess(2)
End Sub

Function RootFolder(pPath, pDict)
  Dim lK, l, lF
  RootFolder = ""
  For Each lK In pDict.Keys
    lF = GetPath(lK)
    l  = Len(lF)
    If UCase(lF) = UCase(Left(pPath, l)) Then
      RootFolder = lK
      Exit For
    End If
  Next
End Function

Function GetPath(pPath)
  GetPath = FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings(pPath))
End Function

Function MessBox(pMess, pMode)
  Dim lIcon
  Select Case pMode
    Case 1 lIcon = vbCritical    + vbOKOnly
    Case 2 lIcon = vbExclamation + vbOKOnly
    Case 3 lIcon = vbInformation + vbOKOnly
  End Select
  MessBox = MsgBox(pMess, lIcon, Mess(0))
End Function

Sub CheckErr
  If Err.Number <> 0 Then
    MessBox "Возникла ошибка № " & Err.Number & ":" & vbNewLine & Err.Description, 1
    Quit Err.Number
  End If
End Sub

Sub Quit(pQuitCode)
  Set FLD  = Nothing
  Set Mess = Nothing
  Set WSH  = Nothing
  Set FSO  = Nothing
  WScript.Quit pQuitCode
End Sub

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



Joined: 07 Oct 2009
Posts: 18
Location: Башкортостан

Post (Separately) Posted: Thu Dec 03, 2009 14:25    Post subject: Reply with quote

Спасибо Batya , всё работает !
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
Page 1 of 1

 
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