View previous topic :: View next topic |
Author |
Message |
Rustem
Joined: 07 Oct 2009 Posts: 18 Location: Башкортостан
|
(Separately) Posted: Tue Nov 03, 2009 09:52 Post subject: Копирование / перемещение данных по разным путям |
|
|
Здравствуйте все ! Нужен скрипт для следующей задачи :
Есть несколько источников данных на разных дисках:
«D:\Источник_1\» , «Е:\Источник_2\» , ... , «G:\Источник_N\» .
Внутри них есть куча подкаталогов , файлов .
Нужно в зависимости от того, внутри какого из этих источников данных мы находимся:
1) Скопировать по путям 1 и 2 ( H:\На печать , I:\На архивацию) выделенные папки,файлы. Если ничего не выделено, то копировать файл/папку на которой стоит курсор .
2) Переместить по путям 3 и 4 (K:\Заархивировано , L:\ Передано ) выделенные папки,файлы. Если ничего не выделено, то переместить файл/папку на которой стоит курсор .
3) Скопировать по пути 5 , и переместить по пути 6 выделенные папки,файлы. Если ничего не выделено, копируем и перемещаем файл/папку на которой стоит курсор . |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Mon Nov 09, 2009 22:42 Post subject: |
|
|
Напиши _три_ разных скрипта/батника, которые по отдельности будут делать каждый свою _одну_ задачу.
Помести их в соответствующие папки, назови одинаково и передавай одинаковые параметры (%L)
Получится, что одна кнопка выполняет разные задачи, в зависимости от открытой папки |
|
Back to top |
|
|
Rustem
Joined: 07 Oct 2009 Posts: 18 Location: Башкортостан
|
(Separately) Posted: Tue Nov 10, 2009 09:27 Post subject: |
|
|
Quote: | Помести их в соответствующие папки ... |
В смысле закинуть их в папки-источники ? |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Tue Nov 10, 2009 09:51 Post subject: |
|
|
Да. Туда, где они должны работать.
А в поле 'Команда' напишешь не D:\путь\скрипт, а просто скрипт
Путь запуска: пусто или папка-источник |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Tue Nov 10, 2009 10:08 Post subject: |
|
|
Rustem
А если текущий каталог «D:\Источник_1\Подкаталог_1\», то скрипт\батник должен работать? _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Rustem
Joined: 07 Oct 2009 Posts: 18 Location: Башкортостан
|
(Separately) Posted: Wed Nov 11, 2009 09:07 Post subject: |
|
|
Batya
Quote: | А если текущий каталог «D:\Источник_1\Подкаталог_1\», то скрипт\батник должен работать? |
Да, должен. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Wed Nov 11, 2009 12:06 Post subject: |
|
|
Rustem wrote: | Да, должен. |
Тогда вариант Tol!k-а не сработает
Tol!k wrote: | Помести их в соответствующие папки, назови одинаково и передавай одинаковые параметры |
vbs-скрипт напишу позже. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
hawk777
Joined: 27 Dec 2008 Posts: 61
|
(Separately) Posted: Sat Nov 14, 2009 23:26 Post subject: |
|
|
Здравствуйте. как можно в ТК переместить один файл в выделенные папки и подкаталоги (например файл ридми.тхт в папку 1 и все папки что внутри нее)? есть какой нить плагин который упрощает задачу? |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
(Separately) Posted: Sun Nov 15, 2009 00:33 Post subject: |
|
|
"Переместить" никак! Ибо после первого же перемещения перемещать будет уже нечего. Видимо, имелось в виду "скопировать".
Я вижу два способа. Первый хорош всем, если не слишком трудоемко собрать на одной панели все целевые вкладки. Второй способ: каким-либо образом (например, через m_CopyFullNamesToClip) собрать в текстовом файле имена всех директорий-приемников. Затем простой глобальной заменой добавить в начале каждой строки Code: | copy c:\my\path\readme.txt | и полученный файл переименовать в нечто.bat и запустить.
Думаю, есть и более изящные решения. _________________ Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон) |
|
Back to top |
|
|
hawk777
Joined: 27 Dec 2008 Posts: 61
|
(Separately) Posted: Sun Nov 15, 2009 23:11 Post subject: |
|
|
Вахмурка
Спасибо товарищ. очень выручили |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Fri Nov 20, 2009 10:56 Post subject: |
|
|
Rustem wrote: | 2) Переместить по путям 3 и 4 |
Rustem wrote: | 3) Скопировать по пути 5 , и переместить по пути 6 |
Не понял, чем это отличается? Вообще, п. 2 некорректен - как писал Вахмурка для такой же ситуации: Вахмурка wrote: | "Переместить" никак! Ибо после первого же перемещения перемещать будет уже нечего. Видимо, имелось в виду "скопировать". |
_________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Mon Nov 23, 2009 13:21 Post subject: |
|
|
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 |
|
|
Rustem
Joined: 07 Oct 2009 Posts: 18 Location: Башкортостан
|
(Separately) Posted: Thu Dec 03, 2009 14:25 Post subject: |
|
|
Спасибо Batya , всё работает ! |
|
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
|