View previous topic :: View next topic |
Author |
Message |
SkYB
Joined: 04 Mar 2006 Posts: 23 Location: Киев
|
(Separately) Posted: Mon Jun 02, 2008 20:57 Post subject: |
|
|
Пипл , подскажите есть ли в природе такой плаг , чтоб копировал из *.txt файла пути , на нужное мне место ? Принцип работы такой же как "Загрузка из списка" в ФТП.
Нужно для того , к примеру я на работе имею хороший инет и качаю двд фильмы и просую лабуду , сражу же её катализирую по папкам ( Кино , Музыка , Проги т.д.) и копирую с путями эти файлы , себе в список а потом в конце недели к примеру , прихожу с винтом и качаю всё это себе домой. Так вот надо бы тулзу или скрипт , чтоб вся эта операция происходила из списка автоматом. Помогите если знаете , а то надо очень. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Tue Jun 03, 2008 09:41 Post subject: |
|
|
SkYB wrote: | чтоб копировал из *.txt файла пути , на нужное мне место ? |
Необходимо уточнение. "Нужное" место где задается? Оно одинаково для всех файлов в файле-списке? _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
SkYB
Joined: 04 Mar 2006 Posts: 23 Location: Киев
|
(Separately) Posted: Tue Jun 03, 2008 12:49 Post subject: |
|
|
Batya wrote: | SkYB wrote: | чтоб копировал из *.txt файла пути , на нужное мне место ? |
Необходимо уточнение. "Нужное" место где задается? Оно одинаково для всех файлов в файле-списке? |
Ну походу это место диск G - который я вставляю в usb. Сам принцип работы меня бы устроил абсолютно , как работает "загрузка из списка" в фтп секции. Тобиш я нажимаю "кнопку" - следующее действие , спрашивается из какого списка.txt брать пути для копирования - я указываю путь и нажимаю ок, а следующее действие это копирование на активный в данный момент каталог , в моём случае диск G.
|
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Tue Jun 03, 2008 14:20 Post subject: |
|
|
Ставлю вопрос на примере.
Пусть файл Домой.txt содержит:
Code: | C:\File1.ext
C:\Folder1\File2.ext
C:\Folder2\Folder3\File3.ext |
Что в результате нужно получить на диске G?
Code: | G:\File1.ext
G:\File2.ext
G:\File3.ext |
или
Code: | G:\File1.ext
G:\Folder1\File2.ext
G:\Folder2\Folder3\File3.ext | ??? _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
SkYB
Joined: 04 Mar 2006 Posts: 23 Location: Киев
|
(Separately) Posted: Tue Jun 03, 2008 14:45 Post subject: |
|
|
Batya wrote: | Ставлю вопрос на примере.
Пусть файл Домой.txt содержит:
Code: | C:\File1.ext
C:\Folder1\File2.ext
C:\Folder2\Folder3\File3.ext |
Что в результате нужно получить на диске G?
Code: | G:\File1.ext
G:\File2.ext
G:\File3.ext |
|
Да именно , первый вариант, просто перекопировать их на другой диск.
Пример списка
Quote: | d:\TEMP\Dawnloads\Videos\Ночная смена.avi
d:\TEMP\Dawnloads\Videos\Оно.avi
d:\TEMP\Dawnloads\VST\Tony Maserati API Presets\ |
а куда будут кидаться - просто в корень диска G (или другой необходимый на тот момент)
Quote: | G:\Ночная смена.avi
G:\Оно.avi
G:\Tony Maserati API Presets |
на этом мне больше ничего не нужно.
Хотя скажу , что второй вами приведённый пример , тоже актуален и будет полезен , когда к примеру нужно чтоб некоторые файлы были в нужной директории ( это если уйма файлов накопилась , чтоб легче было их потом дома разбирать), но опять же это не перврочередная потребность |
|
Back to top |
|
|
DrShark
Joined: 21 Oct 2006 Posts: 911 Location: Kyiv, Ukraine
|
(Separately) Posted: Tue Jun 03, 2008 20:23 Post subject: |
|
|
2SkYB
В своё время я написал Гислеру реквест о реализации такой задачи. Он сказал, что рассмотрит его
Так что, возможно, в Total Commander 7.5... но не будем загадывать наперёд |
|
Back to top |
|
|
SkYB
Joined: 04 Mar 2006 Posts: 23 Location: Киев
|
(Separately) Posted: Wed Jun 04, 2008 15:14 Post subject: |
|
|
Так что , получается моя проблема пока не решаема любыми способами? |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Wed Jun 04, 2008 15:34 Post subject: |
|
|
SkYB
Немного терпения _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
SkYB
Joined: 04 Mar 2006 Posts: 23 Location: Киев
|
(Separately) Posted: Wed Jun 04, 2008 16:53 Post subject: |
|
|
Batya wrote: | SkYB
Немного терпения |
Понял , сидимс , ждёмс |
|
Back to top |
|
|
Моторокер
Joined: 06 May 2005 Posts: 1517 Location: г. Пермь (читается Перьмь)
|
(Separately) Posted: Thu Jun 05, 2008 10:02 Post subject: |
|
|
SkYB wrote: | Пипл , подскажите есть ли в природе такой плаг , чтоб копировал из *.txt файла пути , на нужное мне место ? |
DiskDir от Гислера.
Создаёшь lst файл, заходишь в него как в архив и как обычно копируешь нужные файлы.
Используешь галочку «Учитывать каталоги» по назначению. _________________ плагины для Total Commander, статьи Graphics Converter; NSCopy; SEO HTML; KillOK; Плагин на Delphi
ПармаСруб - строительство домов и бань в Перми |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Tue Jun 24, 2008 13:43 Post subject: |
|
|
SkYB
Не знаю, актуально ли еще...
Написал скрипт для копирования по списку. В принципе, скрипт можно написать в несколько строчек, но хотелось сделать максимально грамотно и красиво, поэтому получилось несколько длиннее
Code: | '==============================================================================
' Копирование выделенных файлов\папок в противоположную панель ТС
' Параметры вызова из TC:
' %L "%T" [{режим копирования}]
' где необязательный параметр {режим копирования} может принимать значения:
' 0 - если в файле-списке указана папка, а не файл, то вложенные файлы и папки
' копируются с сохранением относительной структуры (по умолчанию);
' 1 - копирование всех файлов в корень целевой папки;
' 2 - копирование с созданием полной стуктуры вложенных папок относительно
' корня диска
' Если 1-ый параметр указан пустым (""), то файл-список выбирается вручную
' Если 2-ой параметр указан пустым (""), то целевая папка выбирается вручную
'==============================================================================
Option Explicit
'===== Изменяемые параметры ===================================================
Const Overwrite = False 'Признак перезаписи существующих файлов
Const IgnorePrefix = "file://localhost/" 'Игнорируемый префикс
'==============================================================================
Dim FSO, FileList, TargetDir, Mess, Mess1, List, F, Errors, MessMode
Dim FilesAmount, FoldersAmount, CopyMode, Depth, i, oSA, CopyFlags, WSH
SetMess
Set oSA = CreateObject("Shell.Application")
Set WSH = CreateObject("WScript.Shell")
CheckParam
List = Split(FSO.OpenTextFile(FileList, 1).ReadAll, vbNewLine)
If Overwrite Then
CopyFlags = 16
Else
CopyFlags = 0
End If
Set Errors = CreateObject("Scripting.Dictionary")
If CopyMode = 2 Then
Set Depth = CreateObject("Scripting.Dictionary")
End If
FilesAmount = 0
FoldersAmount = 0
For Each F In List
F = Trim(F)
If F <> "" Then
If LCase(Left(F, Len(IgnorePrefix))) = LCase(IgnorePrefix) Then
F = Mid(F, Len(IgnorePrefix) + 1)
End If
F = GetPath(F)
On Error Resume Next
Copy F, TargetDir
On Error GoTo 0
End If
Next
If FilesAmount > 0 Then
Mess1 = Mess(6) & " " & FilesAmount & " " & Mess(7)
End If
If FoldersAmount > 0 Then
Mess1 = Mess1 & vbNewLine & Mess(6) & " " & FoldersAmount & " " & Mess(13)
End If
If (FilesAmount = 0) And (FoldersAmount = 0) Then
Mess1 = Mess(8)
End If
If Errors.Count > 0 Then
MessMode = 2
Else
MessMode = 3
End If
Mess1 = Mess1 & vbNewLine & JoinErr(Errors)
MessBox Mess1, MessMode
Quit
Sub CheckParam
If WScript.Arguments.Count = 0 Then
MessBox Mess(1), 1
Quit
End If
If WScript.Arguments.Count < 2 Then
MessBox Mess(2), 1
Quit
End If
FileList = WScript.Arguments(0)
TargetDir = WScript.Arguments(1)
Set FSO = CreateObject("Scripting.FileSystemObject")
If FileList = "" Then
FileList = OpenFile
Else
FileList = GetPath(FileList)
End If
If TargetDir = "" Then
TargetDir = OpenFolder
Else
TargetDir = GetPath(TargetDir)
End If
If Not FSO.FileExists(FileList) Then
MessBox Mess(3), 1
Quit
End If
If Not FSO.FolderExists(TargetDir) Then
MessBox Mess(4), 1
Quit
End If
If FSO.GetFile(FileList).Size = 0 Then
MessBox Mess(5), 1
Quit
End If
If WScript.Arguments.Count > 2 Then
CopyMode = WScript.Arguments(2)
If Not (CopyMode = 0 Or CopyMode = 1 Or CopyMode = 2) Then
MessBox Mess(11), 1
Quit
End If
Else
CopyMode = 0
End If
End Sub
Sub SetMess
Set Mess = CreateObject("Scripting.Dictionary")
Mess.Add 0, "Копирование из файла-списка"
Mess.Add 1, "Не указаны входные параметры!"
Mess.Add 2, "Указаны не все входные параметры!"
Mess.Add 3, "Файл-список не существует!"
Mess.Add 4, "Целевая папка не существует!"
Mess.Add 5, "Файл-список пустой!"
Mess.Add 6, "Успешно скопировано"
Mess.Add 7, "файлов."
Mess.Add 8, "Ничего не удалось скопировать."
Mess.Add 9, "Не удалось выполнить копирование"
Mess.Add 10, "по причине ошибки:"
Mess.Add 11, "Неправильно указан режим копирования!"
Mess.Add 12, "Успешно создано"
Mess.Add 13, "папок."
Mess.Add 14, "В целевой папке данный файл уже существует!"
Mess.Add 15, "Выбирете целевую папку"
Mess.Add 16, "Файл-список"
Mess.Add 17, "Ошибка не известна."
Mess.Add 18, "Введите путь к файлу-списку."
Mess.Add 19, "Введено несуществующее имя файла." & vbNewLine & "Нажмите ""OK"" для повторного ввода."
End Sub
Function MessBox(pMess, pMode)
Dim lIcon
Select Case pMode
Case 1 lIcon = vbCritical + vbOKOnly
Case 2 lIcon = vbExclamation + vbOKOnly
Case 3 lIcon = vbInformation + vbOKOnly
Case 4 lIcon = vbExclamation + vbOKCancel
End Select
MessBox = MsgBox(pMess, lIcon, Mess(0))
End Function
Function JoinErr(pDic)
Dim lKey
For Each lKey In pDic
JoinErr = JoinErr & vbNewLine & vbNewLine & _
Mess(9) & " """ & lKey & """ " & Mess(10) & _
vbNewLine & pDic(lKey)
Next
End Function
Sub Copy(pF, pTarget)
Dim lF, oF, lTarget, oNS
lTarget = pTarget
If Right(lTarget, 1) <> "\" Then
lTarget = lTarget & "\"
End If
If CopyMode = 2 Then
lTarget = CopyFolderStructure(lTarget, pF)
End If
If FSO.FileExists(pF) Then
If (Not Overwrite) And FSO.FileExists(lTarget & FSO.GetFile(pF).Name) Then
Errors.Add pF, Mess(14)
Else
CreateFoldersTree lTarget
Set oNS = oSA.NameSpace(lTarget)
oNS.CopyHere pF, CopyFlags
Set oNS = Nothing
If Err.Number <> 0 Then
Errors.Add pF, Err.Description
Else
If Not FSO.FileExists(lTarget & FSO.GetFile(pF).Name) Then
Errors.Add pF, Mess(17)
Else
FilesAmount = FilesAmount + 1
End If
End If
End If
End If
If FSO.FolderExists(pF) Then
CreateFoldersTree lTarget
Set oF = FSO.GetFolder(pF)
If (CopyMode = 0) Or (CopyMode = 2) Then
Set oNS = oSA.NameSpace(lTarget)
oNS.CopyHere pF, CopyFlags
Set oNS = Nothing
If Err.Number <> 0 Then
Errors.Add pF, Err.Description
Else
If Not FSO.FolderExists(lTarget & oF.Name) Then
Errors.Add pF, Mess(17)
Else
FoldersAmount = FoldersAmount + 1
End If
End If
End If
If CopyMode = 1 Then
For Each lF In oF.Files
If (Not Overwrite) And FSO.FileExists(lTarget & lF.Name) Then
Errors.Add lF.Path, Mess(14)
Else
Set oNS = oSA.NameSpace(lTarget)
oNS.CopyHere lF.Path, CopyFlags
Set oNS = Nothing
If Err.Number <> 0 Then
Errors.Add lF.Path, Err.Description
Else
If Not FSO.FileExists(lTarget & lF.Name) Then
Errors.Add lF.Path, Mess(17)
Else
FilesAmount = FilesAmount + 1
End If
End If
End If
Next
For Each lF In oF.SubFolders
Copy lF.Path, lTarget
Next
Set lF = Nothing
End If
Set oF = Nothing
End If
End Sub
Function CopyFolderStructure(pTarget, pPath)
Dim lPath
If FSO.FileExists(pPath) Then
lPath = FSO.GetParentFolderName(pPath) & "\"
Else
lPath = FSO.GetAbsolutePathName(pPath) & "\"
End If
Depth.RemoveAll
GetDepth lPath
CopyFolderStructure = pTarget
For i = Depth.Count To 1 Step -1
CopyFolderStructure = CopyFolderStructure & Depth(i) & "\"
Next
End Function
Sub CreateFoldersTree(pFolder)
Dim lParentFolder
If Not FSO.FolderExists(pFolder) Then
lParentFolder = FSO.GetParentFolderName(pFolder)
If Not FSO.FolderExists(lParentFolder) Then
CreateFoldersTree(lParentFolder)
End If
FSO.CreateFolder(pFolder)
End If
End Sub
Sub GetDepth(pPath)
Depth.Add Depth.Count + 1, FSO.GetFolder(pPath).Name
If FSO.GetDriveName(pPath) & "\" <> FSO.GetParentFolderName(pPath) Then
GetDepth FSO.GetParentFolderName(pPath)
End If
End Sub
Function OpenFile
Dim Dlg, DlgResult
On Error Resume Next
Set Dlg = CreateObject("UserAccounts.CommonDialog")
If Err.Number = 0 Then
On Error GoTo 0
Dlg.Filter = Mess(16) & " (*.*)|*.*"
Dlg.Flags = &H4 + &H8 + &H400 + &H1000 + &H80000
DlgResult = Dlg.ShowOpen
If DlgResult Then
OpenFile = Dlg.FileName
End If
Set Dlg = Nothing
If Not DlgResult Then
Quit
End If
Else
On Error GoTo 0
Do
Dlg = InputBox(Mess(18), Mess(0))
If Dlg = "" Then
Quit
Else
Dlg = GetPath(Dlg)
End If
If Not FSO.FileExists(Dlg) Then
Dlg = ""
DlgResult = MessBox(Mess(19), 4)
If DlgResult = vbCancel Then
Quit
End If
End If
Loop Until (Dlg <> "")
OpenFile = Dlg
End If
End Function
Function OpenFolder
Dim oF, lSelect
Set oF = oSA.BrowseForFolder(0, Mess(15), 16)
lSelect = Not (TypeName(oF) = "Nothing")
If lSelect Then
OpenFolder = oF.Self.Path
End If
Set oF = Nothing
If Not lSelect Then
Quit
End If
End Function
Function GetPath(pPath)
GetPath = FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings(pPath))
End Function
Sub Quit
Set Errors = Nothing
Set Depth = Nothing
Set Mess = Nothing
Set FSO = Nothing
Set oSA = Nothing
Set WSH = Nothing
WScript.Quit
End Sub |
В шапке скрипта можно по желанию изменить константу Overwrite значением True или False - признак перезаписи существующих файлов.
Параметры для разных вариантов использования:
* Копирование выделенных файлов\папок в противоположную панель ТС:%L "%T" [{режим копирования}] * Копирование файлов\папок из файла-списка в противоположную панель ТС:{файл-список} "%T" [{режим копирования}] * Копирование файлов\папок из файла-списка в указанную целевую папку:{файл-список} {целевая папка} [{режим копирования}] * Копирование выделенных файлов\папок в указанную целевую папку:%L {целевая папка} [{режим копирования}] * Копирование файлов\папок из файла-списка под курсором в указанную целевую папку:%P%N {целевая папка} [{режим копирования}] * Копирование выделенных файлов\папок в выбираемую при запуске папку:%L "" [{режим копирования}] * Копирование файлов\папок из выбираемого при запуске файла-списка в выбираемую при запуске папку:"" "" [{режим копирования}] Не русскоязычные пользователи могут соотвествующим образом изменить процедуру SetMess.
Добавлено: Теперь, если второй параметр пустой (""), целевую папку можно указать вручную.
Добавлено: Теперь, если первый параметр пустой (""), файл-список можно указать вручную. Изменен способ копирования. Добавлен вариант копирования (2) с полным копированием структуры.
Добавлено: Теперь у представленных в файле-списке файлов\папок игнорируется префикс "file://localhost/".
Добавлено: Теперь в параметрах можно использовать переменные окружения.
Исправлено: Если первый параметр пустой (""), на Windows Vista ошибка не возникает, и путь к файлу-списку нужно вводить вручную. _________________ Нет, я не сплю. Я просто медленно моргаю.
Last edited by Batya on Mon Jul 21, 2008 11:53; edited 8 times in total |
|
Back to top |
|
|
SkYB
Joined: 04 Mar 2006 Posts: 23 Location: Киев
|
(Separately) Posted: Tue Jun 24, 2008 19:31 Post subject: |
|
|
Огромное спасибо , скрипт актуален как никогда. Только есть маленькая проблема - я сроду скрипты не использовал в командере - как и куда это дело нужно запихнуть и как с ним работать ? |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Wed Jun 25, 2008 10:37 Post subject: |
|
|
SkYB
Создаешь текстовый файл с расширением vbs и указанным в секции "Код" содержимым. Перетаскиваешь этот файл на панель TC. Изменяешь получившуюся кнопку - указываешь нужные тебе параметры, в зависимости от варианта использования. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
SkYB
Joined: 04 Mar 2006 Posts: 23 Location: Киев
|
(Separately) Posted: Wed Jun 25, 2008 13:30 Post subject: |
|
|
Batya wrote: | SkYB
Создаешь текстовый файл с расширением vbs и указанным в секции "Код" содержимым. Перетаскиваешь этот файл на панель TC. Изменяешь получившуюся кнопку - указываешь нужные тебе параметры, в зависимости от варианта использования. |
Всё , огромное ещё раз спасибо , разобрался. Но есть ещё одна маленькая просьба - а можно ли в этот скрипт , вписать , чтоб он показывал какой нибудь прогресс бар с тем, что он копирует - а то когда файлов пару гигабайт - комп впадает в штопор , но не видно сколько осталось до конца процесса ? Трудно ли это сделать в этом скрипте ???
p/s - и ещё я немного недопёр , что обозначают вот эти "параметры" - %L , %P , %T , %N и т.д. - что это и с чем его едят ?
и последнее , вот этот параметр Quote: | 0 - копирование с сохранением структуры вложенных папок (по умолчанию) | - чёгото не работает. Если я правильно понял , то он должен , те файлы которые в списке - перекопировать в указанную директорию с такиме же папками как в списке , пример:
Code: | D:\Games\Quake
F:\Movie\xxx.avi |
и так же оно должно быть на нужном мне диске
Quote: | H:\Games\Quake
H:\Movie\xxx.avi |
|
|
Back to top |
|
|
Rodny
Joined: 24 Jan 2007 Posts: 949 Location: Могилёв, Беларусь
|
(Separately) Posted: Wed Jun 25, 2008 17:22 Post subject: |
|
|
SkYB wrote: | что обозначают вот эти "параметры" - %L , %P , %T , %N и т.д. |
Когда открыт диалог настройки панели инструментов - нажми Справка, откроется нужный раздел. |
|
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
|