[Script] Копирование файлов по списку
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Автоматизация Total Commander

#1:  Author: SkYBLocation: Киев PostPosted: Mon Jun 02, 2008 20:57
    —
Пипл , подскажите есть ли в природе такой плаг , чтоб копировал из *.txt файла пути , на нужное мне место ? Принцип работы такой же как "Загрузка из списка" в ФТП.
Нужно для того , к примеру я на работе имею хороший инет и качаю двд фильмы и просую лабуду , сражу же её катализирую по папкам ( Кино , Музыка , Проги т.д.) и копирую с путями эти файлы , себе в список а потом в конце недели к примеру , прихожу с винтом и качаю всё это себе домой. Так вот надо бы тулзу или скрипт , чтоб вся эта операция происходила из списка автоматом. Помогите если знаете , а то надо очень.

#2:  Author: BatyaLocation: Москва, Россия PostPosted: Tue Jun 03, 2008 09:41
    —
SkYB wrote:
чтоб копировал из *.txt файла пути , на нужное мне место ?

Необходимо уточнение. "Нужное" место где задается? Оно одинаково для всех файлов в файле-списке?

#3:  Author: SkYBLocation: Киев PostPosted: Tue Jun 03, 2008 12:49
    —
Batya wrote:
SkYB wrote:
чтоб копировал из *.txt файла пути , на нужное мне место ?

Необходимо уточнение. "Нужное" место где задается? Оно одинаково для всех файлов в файле-списке?

Ну походу это место диск G - который я вставляю в usb. Сам принцип работы меня бы устроил абсолютно , как работает "загрузка из списка" в фтп секции. Тобиш я нажимаю "кнопку" - следующее действие , спрашивается из какого списка.txt брать пути для копирования - я указываю путь и нажимаю ок, а следующее действие это копирование на активный в данный момент каталог , в моём случае диск G.




#4:  Author: BatyaLocation: Москва, Россия PostPosted: Tue Jun 03, 2008 14:20
    —
Ставлю вопрос на примере.
Пусть файл Домой.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
???

#5:  Author: SkYBLocation: Киев PostPosted: Tue Jun 03, 2008 14:45
    —
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

на этом мне больше ничего не нужно.

Хотя скажу , что второй вами приведённый пример , тоже актуален и будет полезен , когда к примеру нужно чтоб некоторые файлы были в нужной директории ( это если уйма файлов накопилась , чтоб легче было их потом дома разбирать), но опять же это не перврочередная потребность Rolling Eyes

#6:  Author: DrSharkLocation: Kyiv, Ukraine PostPosted: Tue Jun 03, 2008 20:23
    —
2SkYB
В своё время я написал Гислеру реквест о реализации такой задачи. Он сказал, что рассмотрит его Smile
Так что, возможно, в Total Commander 7.5... но не будем загадывать наперёд Smile

#7:  Author: SkYBLocation: Киев PostPosted: Wed Jun 04, 2008 15:14
    —
Так что , получается моя проблема пока не решаема любыми способами?

#8:  Author: BatyaLocation: Москва, Россия PostPosted: Wed Jun 04, 2008 15:34
    —
SkYB
Немного терпения Wink

#9:  Author: SkYBLocation: Киев PostPosted: Wed Jun 04, 2008 16:53
    —
Batya wrote:
SkYB
Немного терпения Wink

Понял , сидимс , ждёмс Very Happy

#10:  Author: МоторокерLocation: г. Пермь (читается Перьмь) PostPosted: Thu Jun 05, 2008 10:02
    —
SkYB wrote:
Пипл , подскажите есть ли в природе такой плаг , чтоб копировал из *.txt файла пути , на нужное мне место ?

DiskDir от Гислера.
Создаёшь lst файл, заходишь в него как в архив и как обычно копируешь нужные файлы.
Используешь галочку «Учитывать каталоги» по назначению.

#11:  Author: BatyaLocation: Москва, Россия PostPosted: Tue Jun 24, 2008 13:43
    —
SkYB
Не знаю, актуально ли еще...
Написал скрипт для копирования по списку. В принципе, скрипт можно написать в несколько строчек, но хотелось сделать максимально грамотно и красиво, поэтому получилось несколько длиннее Smile
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 - признак перезаписи существующих файлов.
Параметры для разных вариантов использования:

* Копирование выделенных файлов\папок в противоположную панель ТС:* Копирование файлов\папок из файла-списка в противоположную панель ТС:* Копирование файлов\папок из файла-списка в указанную целевую папку:* Копирование выделенных файлов\папок в указанную целевую папку:* Копирование файлов\папок из файла-списка под курсором в указанную целевую папку:* Копирование выделенных файлов\папок в выбираемую при запуске папку:* Копирование файлов\папок из выбираемого при запуске файла-списка в выбираемую при запуске папку:Не русскоязычные пользователи могут соотвествующим образом изменить процедуру SetMess.

Добавлено: Теперь, если второй параметр пустой (""), целевую папку можно указать вручную.

Добавлено: Теперь, если первый параметр пустой (""), файл-список можно указать вручную. Изменен способ копирования. Добавлен вариант копирования (2) с полным копированием структуры.

Добавлено: Теперь у представленных в файле-списке файлов\папок игнорируется префикс "file://localhost/".

Добавлено: Теперь в параметрах можно использовать переменные окружения.
Исправлено: Если первый параметр пустой (""), на Windows Vista ошибка не возникает, и путь к файлу-списку нужно вводить вручную.


Last edited by Batya on Mon Jul 21, 2008 11:53; edited 8 times in total

#12:  Author: SkYBLocation: Киев PostPosted: Tue Jun 24, 2008 19:31
    —
Огромное спасибо , скрипт актуален как никогда. Только есть маленькая проблема - я сроду скрипты не использовал в командере - как и куда это дело нужно запихнуть и как с ним работать ? Embarassed

#13:  Author: BatyaLocation: Москва, Россия PostPosted: Wed Jun 25, 2008 10:37
    —
SkYB
Создаешь текстовый файл с расширением vbs и указанным в секции "Код" содержимым. Перетаскиваешь этот файл на панель TC. Изменяешь получившуюся кнопку - указываешь нужные тебе параметры, в зависимости от варианта использования.

#14:  Author: SkYBLocation: Киев PostPosted: Wed Jun 25, 2008 13:30
    —
Batya wrote:
SkYB
Создаешь текстовый файл с расширением vbs и указанным в секции "Код" содержимым. Перетаскиваешь этот файл на панель TC. Изменяешь получившуюся кнопку - указываешь нужные тебе параметры, в зависимости от варианта использования.

Всё , огромное ещё раз спасибо , разобрался. Но есть ещё одна маленькая просьба - а можно ли в этот скрипт , вписать , чтоб он показывал какой нибудь прогресс бар с тем, что он копирует - а то когда файлов пару гигабайт - комп впадает в штопор , но не видно сколько осталось до конца процесса ? Трудно ли это сделать в этом скрипте ??? Rolling Eyes

p/s - и ещё я немного недопёр , что обозначают вот эти "параметры" - %L , %P , %T , %N и т.д. - что это и с чем его едят ? Smile

и последнее , вот этот параметр
Quote:
0 - копирование с сохранением структуры вложенных папок (по умолчанию)
- чёгото не работает. Если я правильно понял , то он должен , те файлы которые в списке - перекопировать в указанную директорию с такиме же папками как в списке , пример:
Code:
D:\Games\Quake
F:\Movie\xxx.avi

и так же оно должно быть на нужном мне диске
Quote:
H:\Games\Quake
H:\Movie\xxx.avi

#15:  Author: RodnyLocation: Могилёв, Беларусь PostPosted: Wed Jun 25, 2008 17:22
    —
SkYB wrote:
что обозначают вот эти "параметры" - %L , %P , %T , %N и т.д.

Когда открыт диалог настройки панели инструментов - нажми Справка, откроется нужный раздел.

#16:  Author: SkYBLocation: Киев PostPosted: Fri Jun 27, 2008 16:21
    —
Rodny wrote:
SkYB wrote:
что обозначают вот эти "параметры" - %L , %P , %T , %N и т.д.

Когда открыт диалог настройки панели инструментов - нажми Справка, откроется нужный раздел.

J? пасиба теперь яснее стало Rolling Eyes

#17:  Author: BatyaLocation: Москва, Россия PostPosted: Fri Jun 27, 2008 18:42
    —
SkYB wrote:
а можно ли в этот скрипт , вписать , чтоб он показывал какой нибудь прогресс бар

Сделал. Только при этом я не смогу отслеживать причину возможных ошибок копирования (в т.ч. принудительное нажатие кнопки "Отмена").

SkYB wrote:
и последнее , вот этот параметр
Quote:
0 - копирование с сохранением структуры вложенных папок (по умолчанию)
- чёгото не работает. Если я правильно понял , то он должен , те файлы которые в списке - перекопировать в указанную директорию с такиме же папками как в списке

Прошу прощения, я не совсем верно описал этот вариант копирования. Он работает только, если в файле-списке указана папка, а не файл.
Добавил к скрипту еще один вариант копирования.
Описываю все на примере.
Имеем файл-список:
Code:
C:\File1.ext
C:\Folder1\File2.ext
C:\Folder2\Folder3\File3.ext
C:\Folder4\

При этом папка "C:\Folder4\" содержит
Code:
C:\Folder4\File4.ext
C:\Folder4\Folder5\File5.ext

В результате копирования в папку "C:\Folder6\" при разных режимах имеем:
0:
Code:
C:\Folder6\File1.ext
C:\Folder6\File2.ext
C:\Folder6\File3.ext
C:\Folder6\File4.ext
C:\Folder6\Folder5\File5.ext
В данном случае структура сохраняется только при копировании папок.

1:
Code:
C:\Folder6\File1.ext
C:\Folder6\File2.ext
C:\Folder6\File3.ext
C:\Folder6\File4.ext
C:\Folder6\File5.ext
Все файлы копируются в целевую папку без разбивки по вложенным папкам.

2:
Code:
C:\Folder6\File1.ext
C:\Folder6\Folder1\File2.ext
C:\Folder6\Folder2\Folder3\File3.ext
C:\Folder6\Folder4\File4.ext
C:\Folder6\Folder4\Folder5\File5.ext
Копирование выполняется с сохранением полной структуры вложенности до корня диска.

#18:  Author: SkYBLocation: Киев PostPosted: Fri Jun 27, 2008 19:18
    —
Просто зе Бест, огромное пасиба ещё раз, лучше и не придумать. Угостил бы пивом , только жаль живём далековато Wink

#19:  Author: DrSharkLocation: Kyiv, Ukraine PostPosted: Sat Jun 28, 2008 03:10
    —
2Batya
Скрипт для копирования по списку - отличная работа.
Обнаружил несколько багов/недочётов под Windows Vista (позже проверю на XP):
1) не во всех режимах вызывается прогресс бар;
2) не работает режим принудительной перезаписи
(когда Const Overwrite = True, всё равно появляется запрос на перезапись)
3) в меню, в которых используется параметр "", появляется ошибка:
Code:
---------------------------
Windows Script Host
---------------------------
Сценарий:   C:\totalcmd\Utils\Copy_from_list_2.vbs
Строка:   264
Символ:   3
Ошибка:   Требуется объект: 'oSA'
Код:   800A01A8
Источник:    Ошибка выполнения Microsoft VBScript

---------------------------
ОК   
---------------------------

Собственно, вот моя секция меню Запуск из wincmd.ini, в которую я прописал все варианты работы скрипта:
http://rapidshare.com/files/125496821/user_menu.zip.html
В файле Copy_from_list_2.vbs Overwrite = False, а в Copy_from_list_2_overwrite.vbs - True

#20:  Author: BatyaLocation: Москва, Россия PostPosted: Mon Jun 30, 2008 11:32
    —
DrShark wrote:
1) не во всех режимах вызывается прогресс бар;

От режима не должно зависеть. Прогресс может не появляться, если копируются файлы небольшого размера. Если это не так, можно подробности?
DrShark wrote:
2) не работает режим принудительной перезаписи
(когда Const Overwrite = True, всё равно появляется запрос на перезапись)

Поправил.
DrShark wrote:
3) в меню, в которых используется параметр "", появляется ошибка

Поправил.

#21:  Author: DrSharkLocation: Kyiv, Ukraine PostPosted: Tue Jul 01, 2008 22:11
    —
Batya wrote:
DrShark wrote:
1) не во всех режимах вызывается прогресс бар;

От режима не должно зависеть. Прогресс может не появляться, если копируются файлы небольшого размера. Если это не так, можно подробности?

Мне ещё ни разу не удалось увидеть прогресс при использовании режима "1 - копирование всех файлов в корень целевой папки;", даже при копировании содержимого в несколько гигабайт.

#22:  Author: BatyaLocation: Москва, Россия PostPosted: Wed Jul 02, 2008 14:36
    —
DrShark wrote:
Мне ещё ни разу не удалось увидеть прогресс при использовании режима "1 - копирование всех файлов в корень целевой папки;", даже при копировании содержимого в несколько гигабайт.

Странно, у меня прогресс появляется.
Еще раз подчеркну - прогресс-бар появляется только при копировании больших файлов. Если копируются мелкие, он не появляется. Это не моя прихоть, так работает стандарный COM-объект. Если выполняется копирование папки с параметром 1, то я рекурсивно запускаю копирование для каждого файла, в не для всей папки сразу. Т.е., если у тебя в копируемой папке миллион файлов по 1 кб, по прогресс не появится, а вот для одного файла на 1 Гб прогресс появится.

#23:  Author: SkYBLocation: Киев PostPosted: Wed Jul 02, 2008 17:13
    —
Подтверждаю , что прогресс бар появляется - у меня всё пашет на ура , спасибо автору ! Wink

#24:  Author: DrSharkLocation: Kyiv, Ukraine PostPosted: Thu Jul 03, 2008 16:26
    —
Да, точно, на больших файлах прогресс появляется.
Реквест к скрипту: поддержка в файле-списке путей вида
file://localhost/X:/Somedir/
file://localhost/X:/Somedir/file.xyz
т.к. часто приходится брать пути из браузера или веб-редактора.

#25:  Author: BatyaLocation: Москва, Россия PostPosted: Thu Jul 03, 2008 18:54
    —
DrShark wrote:
Реквест к скрипту: поддержка в файле-списке путей вида
file://localhost/X:/Somedir/
file://localhost/X:/Somedir/file.xyz

Готово.

#26:  Author: LA_ PostPosted: Thu Jul 10, 2008 21:17
    —
товарищи, а может ли кто-нить помочь со скриптом, который при запуске будет брать все файлы и вложенные папки из текущей папки, но за исключением заранее заданных папок и файлов (список можно прописать в самом скрипте - он не меняется), и из этих файлов-папок создавать рар-архив с заданным именем (имя также не меняется) + добавленной датой в конце в формате YYYYMMDD в папке bak?

#27:  Author: LA_ PostPosted: Thu Jul 10, 2008 21:31
    —
Batya
Quote:
LA_
vbs-скрипт, использующий Script Helper:
Код:
'=======================================================
' Создание текстового файла с содержимым буфера обмена
'=======================================================

господа, а можно ли теперь то же самое сделать, но без Script Helper?

#28:  Author: BatyaLocation: Москва, Россия PostPosted: Fri Jul 11, 2008 11:25
    —
LA_ wrote:
господа, а можно ли теперь то же самое сделать, но без Script Helper?
А в чем проблема использования Script Helper?
В данном скрипте ключевые слова - "буфер обмена". Для работы с буфером обмена нужен специальный сторонний COM-объект. В качестве такового может выступать либо Script Helper, либо что-то другое.

LA_ wrote:
товарищи, а может ли кто-нить помочь со скриптом, который при запуске будет брать все файлы и вложенные папки из текущей папки, но за исключением заранее заданных папок и файлов
Кто-нибудь может Wink
Только сейчас совсем нет свободного времени. Через недельку.

#29:  Author: LA_ PostPosted: Fri Jul 11, 2008 22:56
    —
Quote:
А в чем проблема использования Script Helper?

осознал, что он используется лишь для этого скрипта у меня.
интересно понять можно ли обойтись без него.

Quote:
Для работы с буфером обмена нужен специальный сторонний COM-объект. В качестве такового может выступать либо Script Helper, либо что-то другое.

похоже, что этим чем-то другим может быть IE:
Quote:
Neither WSH nor VBScript are able to interact with the clipboard: neither one allows you to copy data to the clipboard and or to paste data from the clipboard. Internet Explorer, on the other hand, can interact with the clipboard.

ссылка

#30:  Author: LA_ PostPosted: Fri Jul 11, 2008 23:03
    —
ага. точнее должно быть вот так:
Code:
'=======================================================
' Создание текстового файла с содержимым буфера обмена
'=======================================================

Option Explicit
Dim FileName
'========== Изменяемые параметры =======================
FileName  = "descript.txt" ' Имя создаваемого файла
'=======================================================
Dim objIE, Clip, Btn, FSO, OTL, Mess, Title

Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")
Clip = objIE.document.parentwindow.clipboardData.GetData("text")
Set objIE = Nothing

If Len(Clip) > 0 Then
  Set FSO = CreateObject("Scripting.FileSystemObject")
  If FSO.FileExists(FileName) Then
    Mess = "Буфер обмена содержит текст." & vbNewLine & _
           "Заменить содержимое файла " & FileName & _
           " текстом из буфера обмена?" & vbNewLine
    Title = "Замена содержимого файла"
  Else
    Mess = "Буфер обмена содержит текст." & vbNewLine & _
           "Создать файл " & FileName & _
           " с содержимым буфера обмена?" & vbNewLine
    Title = "Создание текстового файла"
  End If
  Btn = MsgBox(Mess, vbYesNo + vbQuestion, Title)
  If Btn = 7 Then 'Кнопка No
    Set FSO = Nothing
    WScript.Quit
  End If
Else
  WScript.Quit
End If

Set OTL = FSO.OpenTextFile(FileName, 2, True)
OTL.Write Clip
OTL.Close

Set OTL = Nothing
Set FSO = Nothing
WScript.Quit

#31:  Author: VolniyLocation: Местный PostPosted: Sat Jul 12, 2008 03:00
    —
LA_ wrote:
похоже, что этим чем-то другим может быть IE

Да, конечно. А еще я видел в сети массу примеров, когда для несложных вычислений в качестве COM-сервера использовался Excell 2007 Wink. Не слишком ли для получения фрагмента текста из буфера загружать/выгружать IE ? По крайней мере это будет весьма странным действием для того, кто не использует этот броузер при серфинге.

А зачем ты прикидываешься, что только сейчас додумал про IE? Забыл этот скрипт? http://forum.wincmd.ru/viewpost.php?p=23944

#32:  Author: LA_ PostPosted: Sat Jul 12, 2008 12:21
    —
Quote:
А зачем ты прикидываешься, что только сейчас додумал про IE? Забыл этот скрипт? http://forum.wincmd.ru/viewpost.php?p=23944

о, блин! и правда забыл!

кстати, в моем скрипте выше достаточно написать
Code:
Set objIE = Nothing

?
или это не закрывает IE, а лишь убивает ссылку на него?
objIE.Quit почему-то не работает. скрипт выдает ошибку.

Quote:
Не слишком ли для получения фрагмента текста из буфера загружать/выгружать IE ?

а Script Helper "легче"?

#33:  Author: VolniyLocation: Местный PostPosted: Sat Jul 12, 2008 17:33
    —
LA_ wrote:
Code:
Set objIE = Nothing

?
или это не закрывает IE, а лишь убивает ссылку на него?

Да, убивает ссылку. Но если ссылка была единственной и IE до запуска скрипта не был открыт обычным способом, тогда еще и выгружает IE из памяти.

Quote:
objIE.Quit почему-то не работает. скрипт выдает ошибку.
Работает без проблем, только не вызывай
Code:
Set objIE = Nothing
перед этим.

Quote:
а Script Helper "легче"?
Ну конечно, около 1,5MB . А IE6 - это где-то 16 мегов оперативки, 7-ой конечно же еще больше. Плюс при запуске IE загружается куча только ему нужных библиотек. И все это только для того, чтобы прочесть содержимое буфера?

BTW Если хорошо поискать (возможно даже в этом топике), то найдутся и другие COM-объекты для работы с буфером обмена и, ежели они будут написаны не на VB как в случае с Script Helper-ом, они будут еще менее прожорливые.

#34:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Sat Jul 12, 2008 18:07
    —
Занятно, что на PowerPro скрипт для записи буфера в файл имеет какую-то просто неприличную длину - одну строчку:
Code:
clip.tofile("c:\path\descript.txt", 0)
И никаких тебе СОМ-объектов и IE...

#35:  Author: VolniyLocation: Местный PostPosted: Sat Jul 12, 2008 21:22
    —
Вахмурка wrote:
И никаких тебе СОМ-объектов и IE...

И никакого тебе PowerPro? Wink

#36:  Author: BatyaLocation: Москва, Россия PostPosted: Mon Jul 14, 2008 11:12
    —
Volniy wrote:
И никакого тебе PowerPro?

Very Happy 5 баллов!

Volniy wrote:
Не слишком ли для получения фрагмента текста из буфера загружать/выгружать IE ? По крайней мере это будет весьма странным действием для того, кто не использует этот броузер при серфинге.

А я использую в качестве браузера Maxthon на ядре IE. Так он вообще всегда отображается даже при использовании objIE.Invisible = False. Поэтому я стараюсь объект IE не использовать, хотя уже знаю, что его можно использовать для работы с буфером обмена.
Проще не работать с монстрами, а взять что-то более приспособленное.
Единственный, на мой взгляд, недостаток использования Script Helper-а - его надо предварительно регистрировать. Для Portable-версии это критично.

#37:  Author: GhostKU PostPosted: Tue Jul 15, 2008 03:46
    —
Прошу составить скрипт для автоматизации следующих действий.

Для каждой выделенной папки:
Зайти в папку
Для каждого файла формата *.zip
Разархивировать файл с перезаписью файлов
Удалить *.zip файл
Для каждого файла формата *.rar (он будет только один)
Разарихивировать файл с перезаписью
Удалить файл filename.rar а также все файлы filename.r00, filename.r01 и остальные тома данного архива
Выйти из папки.

Заранее благодарен.

#38: Copy_from_list bug Author: DrSharkLocation: Kyiv, Ukraine PostPosted: Sat Jul 19, 2008 02:42
    —
2Batya
При использовании скрипта копирования по списку в Vista опять наткнулся на баг:
Code:
---------------------------
Windows Script Host
---------------------------
Сценарий:   C:\totalcmd\Utils\Copy_from_list_3_overwrite.vbs
Строка:   254
Символ:   3
Ошибка:   Невозможно создание объекта контейнером ActiveX: 'UserAccounts.CommonDialog'
Код:   800A01AD
Источник:    Ошибка выполнения Microsoft VBScript

---------------------------
ОК   
---------------------------

- возникает в меню с первым пустым параметром ("")
Также сюда, думаю, стоит добавить, что судя по документации Microsoft, UserAccounts.CommonDialog используется только в системах Windows XP и выше. Проверить скрипт на Win2000 и ниже нет возможности, но если осн. функционал работает, до для этих систем лучше заменить CommonDialog на банальный InputBox.

#39:  Author: BatyaLocation: Москва, Россия PostPosted: Mon Jul 21, 2008 12:00
    —
DrShark wrote:
до для этих систем лучше заменить CommonDialog на банальный InputBox

Сделал.
Добавил обработку переменных окружения.

Модераторы
Ребят, кто-нибудь открепите, пожалуйста, сообщения о копировании по списку в отдельную тему.
Начать можно с этого сообщения.
Тему можно назвать "[Script] Копирование по списку".

#40:  Author: МоторокерLocation: г. Пермь (читается Перьмь) PostPosted: Mon Jul 21, 2008 15:37
    —
 !  Сообщения выделены в отдельную тему.

#41:  Author: LA_ PostPosted: Tue Jul 22, 2008 22:38
    —
Batya wrote:
Кто-нибудь может
Только сейчас совсем нет свободного времени. Через недельку.

ждем Wink

#42:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Sun Jul 27, 2008 10:58
    —
Volniy wrote:
И никакого тебе PowerPro? Wink
Ну хоть что-то должно быть!
Я имел в виду лишь размер скрипта. Полстраницы для такой простенькой задачи - многовато...
Долго не отвечал - отпуск. Только что вернулся.

#43:  Author: BatyaLocation: Москва, Россия PostPosted: Mon Jul 28, 2008 16:18
    —
LA_ wrote:
товарищи, а может ли кто-нить помочь со скриптом, который при запуске будет брать все файлы и вложенные папки из текущей папки, но за исключением заранее заданных папок и файлов (список можно прописать в самом скрипте - он не меняется), и из этих файлов-папок создавать рар-архив с заданным именем (имя также не меняется) + добавленной датой в конце в формате YYYYMMDD в папке bak?

Скрипт не нужен. Достаточно только WinRar-а. Кнопка:
Code:
TOTALCMD#BAR#DATA
"C:\Program Files\WinRAR\WinRAR.exe"
a -agYYYYMMDD -x@%L -r -ibck -ep1 -ed "%T.rar" "%P"
C:\Program Files\WinRAR\WinRAR.exe
WinRAR


-1

Соответственно, приведенная мной кнопка создает архив YYYYMMDD.rar в противоположной панели TC, поместив туда все файлы и папки из текущей панели, за исключением выделенных файлов\папок.
Для своего случая можешь самостоятельно указать файл-список исключений вместо %L, целевую папку для архива вместо %T, архивируемую папку вместо %P, а таже написать начало имени архива перед ".rar".

#44:  Author: LA_ PostPosted: Sun Aug 10, 2008 23:52
    —
спасибо!
сделал в итоге просто bat-файл с одной строкой
C:\Utils\Winrar\winrar.exe a -agYYYYMMDD -x*\_bak\* -x*\_ready\* -x*.~* -x*.bak -r -ibck -ep1 -ed "_bak\archive.rar" %~dp0

пакуется содержимое текущей папки в архив archiveYYYYMMDD.rar в папку _bak\, исключаются из упаковки папки _bak, _ready и файлы *.~*, *.bak

#45:  Author: null PostPosted: Tue Oct 14, 2008 09:12
    —
А как сделать так: выделенные файлы и папки (с сохранением структуры) копируются в директории назначения, взятые из списка (как например при FTP-загрузке по списку)? Где-то уже видел, а где - не помню... заранее спасибо

#46:  Author: DrSharkLocation: Kyiv, Ukraine PostPosted: Wed Oct 15, 2008 00:34
    —
null wrote:
А как сделать так: выделенные файлы и папки (с сохранением структуры) копируются в директории назначения, взятые из списка (как например при FTP-загрузке по списку)? Где-то уже видел, а где - не помню... заранее спасибо

Посмотри тут: http://forum.wincmd.ru/viewtopic.php?t=5685
В работе не проверял, возможно приведенные решения нуждаються в корректировке под твою задачу.

#47:  Author: SkYBLocation: Киев PostPosted: Sun Mar 08, 2009 23:34
    —
Batya
Возвращаясь к скрипту "Копирование из списка" - можно ли к нему доделать опции , чтобы файл список после копирования опустошался - тобиш что там написано удалялось ( понимаю , что наверно это сложно сделать , но спросить , спросил) ?
И второе - иметь возможность не только копировать из списка а и переносить файлы из списка. Допустим - я хочу скачанные с интернета файлы , с работы - перенести домой на флешке - так как на работе они мне не нужны , а когда составляешь список - то файлы обычно берутся с разных мест и потом их вычищать вручную , довольно таки нудное занятие - если бы была возможность переноски этих файлов с диска на флешку - было бы очень классно. Rolling Eyes

#48:  Author: Worros PostPosted: Mon Mar 09, 2009 02:38
    —
SkYB
На твоём месте я бы посмотрел в сторону плагинов TempPanel или TempDrive.

#49:  Author: SkYBLocation: Киев PostPosted: Mon Mar 09, 2009 14:18
    —
Worros wrote:
SkYB
На твоём месте я бы посмотрел в сторону плагинов TempPanel или TempDrive.

Можешь в двух словах объяснить - что для чего? Потому как Темп панель я на сайте wincmd.ru - не нашёл - поиск не дал ничего - а по темдрайв - лишь файл на скачку без скринов , описания и комментариев.
Если не затруднит - то расскажи для чего они и как ими пользоваться , раз говоришь , что для меня они более приемлемы чем , скрипт ув. Batya

#50:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Mar 09, 2009 16:59
    —
SkYB wrote:
Потому как Темп панель я на сайте wincmd.ru - не нашёл - поиск не дал ничего - а по темдрайв - лишь файл на скачку без скринов , описания и комментариев.

TempPanel=Temporary Panel. Версия 1.0.0.12 лежит и на wincmd.ru (в плагинах файловой системы), и у Гислера. С описанием. Версия 1.0.0.82 лежит, например, на польском сайте (это здесь). К ней документации нет, но могу сказать, что эта версия поддерживает свою специфическую колонку в панели сетевого окружения для отображения реального пути. Там же, на польском сайте - два альтернативных плагина с описаниями. А вот без скринов и комментариев придётся обойтись. В конце концов можно взять и попробовать самому.

#51:  Author: SkYBLocation: Киев PostPosted: Mon Mar 09, 2009 18:05
    —
Avada wrote:
SkYB wrote:
Потому как Темп панель я на сайте wincmd.ru - не нашёл - поиск не дал ничего - а по темдрайв - лишь файл на скачку без скринов , описания и комментариев.

TempPanel=Temporary Panel. Версия 1.0.0.12 лежит и на wincmd.ru (в плагинах файловой системы), и у Гислера. С описанием. Версия 1.0.0.82 лежит, например, на польском сайте (это здесь). К ней документации нет, но могу сказать, что эта версия поддерживает свою специфическую колонку в панели сетевого окружения для отображения реального пути. Там же, на польском сайте - два альтернативных плагина с описаниями. А вот без скринов и комментариев придётся обойтись. В конце концов можно взять и попробовать самому.

Спасибо , кажется разобрался. Темп панель - вроде то что нужно.

#52:  Author: BatyaLocation: Москва, Россия PostPosted: Tue Mar 10, 2009 12:37
    —
SkYB wrote:
Темп панель - вроде то что нужно.

Докручивать скрипт уже не надо?

#53:  Author: SkYBLocation: Киев PostPosted: Tue Mar 10, 2009 14:19
    —
Batya wrote:
SkYB wrote:
Темп панель - вроде то что нужно.

Докручивать скрипт уже не надо?

Пока сказать на 100% затрудняюсь - я сейчас попользую эту Темп панель - а потом отпишусь здесь в любом случае - скажу результат - оно или не оно. Rolling Eyes

#54:  Author: barin PostPosted: Sat Mar 28, 2009 00:56
    —
Доброго времени суток!

Простите, если не по теме, но очень нужно


Возможно ли реализовать следующее

1. копирование только *.ext1 с сохранением структуры папок

f:\ Folder1\subfolder1\blyablya.ext1 -> c:\ Folder1\subfolder1\blyablya.ext1
f:\ Folder1\subfolder2\blyablyablya.ext1 -> c:\ Folder1\subfolder2\blyablyablya.ext1
f:\ Folder2\subfolder1\ blyablya.ext1 -> c:\ Folder2\subfolder1\ blyablya.ext1
f:\ Folder3\subfolder1\subsubfolder1\ blya.ext1 -> c:\ Folder1\subfolder1\subsubfolder1\ blya.ext1

2. копирование только subfolders1 с содержимым этой папки (только файлы, но со структурой подпапок) с сохранением названия верхней папки т.е.

f:\ Folder1\subfolder1\blyablya.ext -> c:\ Folder1\subfolder1\blyablya.ext
f:\ Folder1\subfolder1\blyablyablya.ext2 -> c:\ Folder1\subfolder1\blyablyablya.ext2
f:\ Folder1\subfolder1\*.* -> c:\ Folder1\subfolder1\*.*
f:\ Folder1\subfolder1\subsubfolder1\ blya.ext -> c:\ Folder1\subfolder1\subsubfolder1\ empty
f:\ Folder1\subfolder2\... -> not copy

3. Путь для копирования необходимых файлов или папок импортируется из файла, в котором вручную вбиваются все эти пути

Заранее спасибо

#55:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Sat Mar 28, 2009 01:35
    —
Навскидку (или с простенькими тестами) на оба вопроса ответ один: нет, ни средствами ТС, ни средствами батников это сделать нельзя. Да, с помощью скриптов сделать это можно, причем весьма просто. Если четко поставишь ТЗ (как любит говорить Batya), могу попробовать сделать, но только на PowerPro. А то твой п. 3 лично мне куда менее понятен, чем пп. 1 и 2. Используй термины "путь-источник" и "путь-приемник".

#56:  Author: barin PostPosted: Sat Mar 28, 2009 11:03
    —
в 3 пункте имеется ввиду следующее: пути-приемники соответствуют указанным критериям как в п.1 и п.2, но путь-источник вбивается вручную, на примере п.2 необходимо скопировать папку subfolder1 из следующих путей-источников
f:\ Folder1\subfolder1\ ; f:\ Folder2\subfolder1\; f:\ Folder3\subfolder1\ ; f:\ Folder4\subfolder1\ и т.д. в пути-применики с:\ Folder1\subfolder1\ ;
с:\ Folder2\subfolder1\ и т.д
пути источники вбиваются вручную ,например, в файл и скрипт берет эти данные оттуда

А было бы еще круто если к примеру задаешь subfolder1 и эта папка копируется из всех мест, где она есть Smile из folder1, folder2, folder3 etc

и еще вопрос, имеет ли значение сетевой диск (или путь-источник в сетке) иль нет?

#57:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Sat Mar 28, 2009 12:26
    —
Поразмышлял еще, и вот что получилось.

п. 1
1. Перейти в f:\
2. Нажать Alt+F7
3. Указать маску *.ext1
4. Когда поиск закончится, нажать Feed to Listbox
5. На противоположной панели перейти в с:\
6. Выделить все и выдать команду cm_PackFiles
7. Указать "архиватор" TreeCopyPlus
7. Нажать ОК.

Получится то, чего ты добивался? Если нет, то что не так? Если да, то задача решена.
Однако второй твой пост наводит на мысль, что на f:\ есть директории, в которых вообще не надо ничего искать. Это так или надо шерстить весь диск в поисках *.ext1 файлов?

п.2.
Как я понял, задача усложняется относительно п. 1, а именно: должны копироваться только файлы с путем f:\ Folder1\subfolder1\*.* и ниже, в приемник c:\Folder1\subfolder1\*.*. Если да, то кто мешает:

1. Создать директорию c:\Folder1\subfolder1
2. Скопировать туда директорию f:\Folder1\subfolder1 со всем содержимым.

Видимо, я все-таки неправильно понял ТЗ. Строка

f:\ Folder1\subfolder2\... -> not copy

вопросов не вызывает, но как понять

f:\ Folder1\subfolder1\subsubfolder1\ blya.ext -> c:\ Folder1\subfolder1\subsubfolder1\ empty

Чем плох файл-источник? Случаен ли пробел перед именем? Что такое "empty"? Должен образовываться файл объемом 0?

Напоследок:
Quote:
имеет ли значение сетевой диск (или путь-источник в сетке) иль нет?
Ни дома, там, где я пишу скрипты, ни здесь, где я выхожу в Интернет, локальной сети нет и скрипт отлаживать не на чем.

#58:  Author: barin PostPosted: Sat Mar 28, 2009 14:10
    —
хорошо. давай более конкретно без всяких этих сабфолдеров и тп

где-то на диске есть следующее древо

MOSCOW
-CHERTEGI
--proetk_msk.dwg
-DOCS
--dogovor_msk.doc
-MAILS
---outlook.pst
-OTHER
--scan.pdf

PETER
-CHERTEGI
--proetk_pit.dwg
-DOCS
--dogovor_pit.doc
-MAILS
- -outlook.pst
-OTHER
- -scan.pdf

VLADIK
-CHERTEGI
- -proetk_vla.dwg
-DOCS
- -dogovor_vla.doc
-MAILS
- -outlook.pst
-OTHER
- -scan.pdf

ROSTOV
-CHERTEGI
- -proetk_ros.dwg
-DOCS
- -dogovor_ros.doc
-MAILS
- -outlook.pst
-OTHER
- -scan.pdf

и т.д.

Все это весит терабайты да и мне не нужно все. мне нужны к примеру все что в папке CHERTEGI, но чтобы в месте копирования создавалась не просто папка CHERTEGI,а верхняя папка откуда эта папка была скопирована

и второй пример, нужны файлы только DOC, но чтобы я знал откуда эти DOC были скопированы , потому что не всегда в названии файла присутствует обозначение с кем этот договор (здесь в примере dogovor_ros.doc) для этого скопируемый файл должен лежать в \ROSTOV\DOCS\dogovor_ros.doc

так более ясен ТЗ?

#59:  Author: BatyaLocation: Москва, Россия PostPosted: Sat Mar 28, 2009 22:35
    —
barin
Что-то ТЗ я не совсем понял Smile
barin wrote:
мне нужны к примеру все что в папке CHERTEGI, но чтобы в месте копирования создавалась не просто папка CHERTEGI,а верхняя папка откуда эта папка была скопирована

barin wrote:
нужны файлы только DOC, но чтобы я знал откуда эти DOC были скопированы

Так в чем проблема? Вахмурка же расписал, как это сделать. Только вместо
Вахмурка wrote:
3. Указать маску *.ext1
указываешь "CHERTEGI" или "*.DOC".
А вместо вот этого:
Вахмурка wrote:
выдать команду cm_PackFiles
7. Указать "архиватор" TreeCopyPlus
можно также использовать скрипт, приведенный в начале темы.
barin wrote:
в 3 пункте имеется ввиду следующее: пути-приемники соответствуют указанным критериям как в п.1 и п.2, но путь-источник вбивается вручную, на примере п.2 необходимо скопировать папку subfolder1 из следующих путей-источников
f:\ Folder1\subfolder1\ ; f:\ Folder2\subfolder1\; f:\ Folder3\subfolder1\ ; f:\ Folder4\subfolder1\ и т.д. в пути-применики с:\ Folder1\subfolder1\ ;
с:\ Folder2\subfolder1\ и т.д
Т.е., насколько я понял, количество копируемых папок равно количеству строк в файле-списке? Тогда используем MultiRun.vbs. Например, пусть скрипт - C:\Folder\CopyStruct.vbs, а список папок для копирования - C:\Lists\FoldersList.txt, тогда кнопка:
Code:
TOTALCMD#BAR#DATA
%Commander_Path%\Utils\WHS\MultiRun.vbs
1 C:\Scripts\CopyStruct.vbs <<%L>> <<C:\Lists\FoldersList.txt>> 2
%Commander_Path%\WCMICONS.DLL,51
Мое хитрое копирование


-1

#60:  Author: barin PostPosted: Mon Mar 30, 2009 12:14
    —
Batya, а как в список для копирования вставлять пути: через запятую, точку-запятую?

#61:  Author: BatyaLocation: Москва, Россия PostPosted: Mon Mar 30, 2009 13:02
    —
barin
В файле FoldersList.txt каждой\му выделенной\му папке\файлу соответствует отдельная строка - папка назначения.

#62:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Mon Mar 30, 2009 13:34
    —
barin:
1. Чай, теперь твоя душенька довольна? Задача решена?
2. А можно ли было ее решить без внешних файлов? Например, так: на одной панели выделяем файлы/директории для копирования, на противоположной либо приемник, либо шаблон, и жмем кнопку.

Использование внешних файлов крайне неудобно, хотя в ряде случаев без них обойтись просто невозможно. Пока откроешь такой файл, пока отредактируешь, перетащишь пути (возможно, через буфер), пока сохранишь, так быстрее было бы врукопашную скопировать.

Файл настроек (ини) - другой дело. Он, как правило, редактируется редко. А тут, видимо, под каждую конкретную задачу надо свой файл делать.

Я потреял нить задачи в тот момент, когда Batya эту нить подхватил. Так что вопрос обоим: можно ли решить задачу, только выделяя файлы/директории на панелях?

#63:  Author: BatyaLocation: Москва, Россия PostPosted: Mon Mar 30, 2009 18:53
    —
Вахмурка wrote:
2. А можно ли было ее решить без внешних файлов? Например, так: на одной панели выделяем файлы/директории для копирования, на противоположной либо приемник, либо шаблон, и жмем кнопку.

Если приемник будет один, то без проблем. Если приемников будет несколько, как в п.3 у barin-а, то нужно загнать в файл список выделенных файлов\папок на противоположной панели. Средствами TC этого сделать нельзя - Гислер не сделал параметра нападобие %L для пассивной панели Sad(( Для этих целей в vbs можно использовать соответствующий макрос из TCScript.Helper.

#64:  Author: barin PostPosted: Fri Apr 03, 2009 16:29
    —
спасибо! но к сожалению я смогу попробовать в понедельник - получаю новыйй комп и надеюсь он будет побыстрее предшественника )
кстати почему-то не присылается на мыло что написали ответ на форуме

#65:  Author: hawk777 PostPosted: Wed Feb 23, 2011 22:33
    —
Batya, а как сделать чтобы Ваш скрипт не копировал файлы, а перемещал их?

#66:  Author: BatyaLocation: Москва, Россия PostPosted: Thu Feb 24, 2011 11:06
    —
hawk777 wrote:
Batya, а как сделать чтобы Ваш скрипт не копировал файлы, а перемещал их?

Поменяй в скрипте, где встречается CopyHere (в 3-х местах), на MoveHere.

#67:  Author: hawk777 PostPosted: Thu Feb 24, 2011 11:33
    —
Ошибка Sad
Code:
---------------------------
Windows Script Host
---------------------------
Сценарий:   C:\Program Files\Total Commander\Utils\WHS\spisok.vbs
Строка:   317
Символ:   3
Ошибка:   Недопустимый вызов или аргумент процедуры
Код:   800A0005
Источник:    Ошибка выполнения Microsoft VBScript

---------------------------
ОК   
---------------------------

Параметры так надо прописывать %P%N d:\download\ 2 ?

#68:  Author: BatyaLocation: Москва, Россия PostPosted: Thu Feb 24, 2011 12:45
    —
hawk777 wrote:
Параметры так надо прописывать %P%N d:\download\ 2 ?

Нет. Вместо %P%N нужно %L.

#69:  Author: hawk777 PostPosted: Thu Feb 24, 2011 13:50
    —
Batya, Когда меняю на %L перемещается сам файл-список, а надо чтобы было так
Batya wrote:
* Копирование файлов\папок из файла-списка под курсором в указанную целевую папку:%P%N {целевая папка} [{режим копирования}]

#70:  Author: BatyaLocation: Москва, Россия PostPosted: Thu Feb 24, 2011 14:09
    —
Ааа... Так список заранее задан. Тогда параметры %P%N d:\download\ 2 правильные.

Разбираемся с ошибкой.
1. Что у тебя в строке 317?
2. Разбей файл-список на несколько частей, чтобы в каждой части было всего несколько строк. Для файла-списка, по которому выдаётся ошибка, нужно определить, на какой строке скрипт ругается. Для этого...
3. Если у тебя в строке 317
Code:
  GetPath = FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings(pPath))
втавь перед этой строкой строку с кодом
Code:
MsgBox """" & pPath & """"

Это добавит отладочное сообщение, которое будет показывать путь к файлу, на котром функция выдаёт ошибку.
4. Покажи здесь путь, выдающий ошибку.

#71:  Author: hawk777 PostPosted: Thu Feb 24, 2011 17:02
    —
1.
Code:
GetPath = FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings(pPath))
Если разбить файл-список, он обрабатывается без ошибок. Правда в конце выскакивает окошко
Code:
 ---------------------------
Копирование из файла-списка
---------------------------
Ничего не удалось скопировать.


---------------------------
ОК   
---------------------------
и копируются не все файлы (из 30000--29000). думаю может из размера файла или большого количества строк (строк 130000 размер около 9 Мб). режу файл по 30000 строк, так и работаю Smile

#72:  Author: Альваро PostPosted: Tue Feb 28, 2012 11:22
    —
Здраствуйте, по ссылке ниже написан скрипт где он ищет и копирует файлы из списка.тхт, но я так понимаю путь к файлам должен иметь вид С:\папка1\папка2\папка3\НужныйФайл.exe.
Можно ли изменить данный код, чтобы список имел вид:
файл1*.exe
файл2*.exe
файл3*.exe
А скрипт нашел эти файлы в c:\база данных\ во всевозможных подкаталогах и скопировал в активное окно ТС.
Двух файлов с одинаковым именем но в разных папка быть не может, но могут быть файл1.ехе и файл1(new).ехе, нужны оба.
Заранее благодарен.

Ссылка


Last edited by Альваро on Tue Feb 28, 2012 12:15; edited 2 times in total

#73:  Author: FlasherLocation: Москва PostPosted: Tue Feb 28, 2012 12:03
    —
Альваро wrote:
Извеняюсь за неудобство сплошного текста, постить ссылки не могу
К прочтению.

Альваро wrote:
где он ищет и копирует файлы из списка.тхт
Ничего он не ищет.
Альваро wrote:
чтобы список имел вид
Список со звёздочками? Таких имён не бывает. А если речь о задании маски, то в скрипте это роли не сыграет.
Альваро wrote:
но могут быть файл1.ехе и файл1(new).ехе, нужны оба.
Если есть файлы с такими названиеми, то они так и скопируются.

Last edited by Flasher on Tue Feb 28, 2012 13:39; edited 1 time in total

#74:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Feb 28, 2012 12:15
    —
Альваро
Безотносительно к последующей правке поста — замечание за нарушение правил форума (оверквотинг в размерах, переходящих все рамки приличий). См. также о цитировании скриптов здесь. Правильный порядок действий описан по ссылке в предыдущем посте. Можно было также упомянуть страницу, где дан в соответствующей теме скрипт. Можно было связаться с модератором через ЛС и заранее решить проблему. Но уж никак не то, что было сделано!

Ссылка на скрипт дана в приличном виде.

#75:  Author: Альваро PostPosted: Tue Feb 28, 2012 13:58
    —
Flasher, когда писал звездочки я имел в виду что написаное имя Файл1 может быть конечным, или файл1(new), заместо нью может быть любой коментарий к файлу, или же оба сразу в разных папках диска. Моя задача отличается от задачи решеной Batya, тем что неизвостно точное имя и местоположение, а только начало названия.

#76:  Author: FlasherLocation: Москва PostPosted: Tue Feb 28, 2012 14:41
    —
Альваро
А просто поиском (Alt+F7) по маске <НАЧАЛО>*.* воспользоваться нельзя?

#77:  Author: Альваро PostPosted: Tue Feb 28, 2012 16:09
    —
Так счас и делается, но файлов много и такие запросы бывают часто.
P.S.: расширение у всех файлов одинаковое

#78:  Author: FlasherLocation: Москва PostPosted: Tue Feb 28, 2012 16:53
    —
Заменить (не проверял):
169 строка:
Code:
  If FSO.FileExists(pF) And StrComp(Left(pF, Len(Top)), Top, 1) = 0 And StrComp(Ext, FSO.GetExtensionName(pF), 1) = 0 Then
209 строка:
Code:
        ElseIf StrComp(Left(lF, Len(Top)), Top, 1) = 0 And StrComp(Ext, FSO.GetExtensionName(lF), 1) = 0  Then
Вставка после 106-й строки:
Code:
    Top = InputBox("Введите начало имён копируемых файлов:", "Фильтрация файлов")
    Ext = InputBox("Введите расширение копируемых файлов:", "Фильтрация файлов")

#79:  Author: Альваро PostPosted: Wed Feb 29, 2012 10:25
    —
Неработает начинает вызывать ошибку за ошибкой, сначала ругается на лишнюю end if, если в 209й поставить пробел между Else if то ругается уже в других подпрограммах.

Добавлено спустя 5 минут:

Зачем инпут бокс, нужно чтобы из файлсписка все выбирало. Думаю расширение файла можно опустить, так как файлы с одинаковым названием но разными расширениями не встретятся, пусть ищет по началу имени например

 !  Avada:
Чтобы теги нормально обрабатывались, надо включить в профиле BBCode!

#80:  Author: FlasherLocation: Москва PostPosted: Wed Feb 29, 2012 11:25
    —
Альваро wrote:
сначала ругается на лишнюю end if
Не вижу, где она там лишняя.
Альваро wrote:
если в 209й поставить пробел между Else if
А кто сказал, что так можно? Не зная броду, ...
Альваро wrote:
Зачем инпут бокс
Затем что
Альваро wrote:
такие запросы бывают часто
Альваро wrote:
нужно чтобы из файлсписка все выбирало.
Всё - это что? И как "выбирало"?
Альваро wrote:
Думаю расширение файла можно опустить, так как файлы с одинаковым названием но разными расширениями не встретятся
Раз можно опустить, то не надо было писать
Альваро wrote:
расширение у всех файлов одинаковое
Мне какая разница?

И просьба соблюдать грамматические азы. Читать такой текст особого удовольствия не доставляет.
___________________________________________
Вот рабочий вариант:
Code:
MIME-Version: 1.0
Content-Type: application/octet-stream; name="Рекурсивное_копирование.7z"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="Рекурсивное_копирование.7z"

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
cwAAABQKAQBVNJHZzfbMARUGAQAgAAAAAAA=

#81:  Author: Потай PostPosted: Fri Sep 07, 2012 09:42
    —
Здравствуйте! У меня такая вот проблемка, нужно из структуры вида

C:\folder1\folder2\123\123\1.jpg

получить структуру

C:\folder1\folder2\123\1.jpg

Я хотел первый самый скрипт как-нибудь использовать, но не знаю как Embarassed

#82:  Author: FlasherLocation: Москва PostPosted: Sun Sep 09, 2012 14:13
    —
Потай
Первый скрипт не поможет. И вообще это неподходящая тема. Тут про копирование. Есть несколько скриптов перемещения на уровень вверх, но не уверен, что они подойдут. Поэтому задачу надо описывать более подробно (здесь, здесь или лучше в новой теме). Если бы задача была только в том виде, что представлена, то она элементарно решалась бы штатными средствами ТС (выделить всё и переместить в родительскую папку). А если этих 123 много и они все разные, то об этом и надо писать заранее, указав на несколько примеров.

#83:  Author: Matras PostPosted: Mon Jan 28, 2013 18:07
    —
Добрый день, нашел ваш скрипт, пытался скопировать, но почему то ошибки возникают с путями типа вот таких "C:\data\zashita_porogi\Ford\F-150\2009-\7.jpg", пишет что там нет такого файла, а он там 100 % есть. из 234 файлов он 30 упускает, потом когда отдельно вставляешь пути к ним он находит, из з этого вопрос можно ли как то это исправить если нет, то хотя бы лог формировать с путями, которые небыли внесены, что бы их повторно вставлять.

#84:  Author: FlasherLocation: Москва PostPosted: Mon Jan 28, 2013 18:23
    —
Matras
Памятка была прочитана? См. первый пункт при ошибках.

#85:  Author: Matras PostPosted: Mon Jan 28, 2013 19:00
    —
Flasher
Я не могу найти эту памятку по ошибкам, вы имеете ввиду именно для этого скрипта есть?

#86:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Jan 28, 2013 19:41
    —
Matras
Для всех скриптов есть. Памятка прикреплена в данном подфоруме с обозначением, что обязательна к прочтению. Открываем содержание подфорума и смотрим.

#87:  Author: Matras PostPosted: Mon Jan 28, 2013 20:22
    —
TC версии 7,56а, win 7 64
Вот скрин ошибки, как быть с одинаковыми названиями?
Параметры: "d:\wamp\www\Работы Tuningdom\Работы\Читсим FTP\new.txt" "%T"

 !  Avada:
Ссылка приведена в норму, ненужные подробности о регистрации TC убраны.

#88:  Author: BatyaLocation: Москва, Россия PostPosted: Fri Feb 01, 2013 17:08
    —
Matras wrote:
как быть с одинаковыми названиями?

Это ты должен сам решить, чего ты хочешь.

#89:  Author: wizard_vrn PostPosted: Tue Apr 09, 2013 13:14
    —
Помогите плиз! Прочитал первые посты скачал срипт от Batyaустановился но файлы не ищет Sad

Задача:
Есть около 20 000 файлов все примерно такого типа имеют имена Data_From_to_XXXXXXXXX, где ХХХХХХХХ номера телефонов.
Расширение у файлов разное.

Нужно чтобы скрипт/плагин нашел файлы с номерами телефонов указанный в отдельном файле например file.txt
В файле только сами номера телефонов.

Спасибо оч надеюсь на помощь Sad

#90:  Author: FlasherLocation: Москва PostPosted: Sun Apr 14, 2013 01:22
    —
wizard_vrn >
Flasher wrote:
И вообще это неподходящая тема. Тут про копирование.
1, 2,...

#91:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Apr 14, 2013 09:07
    —
wizard_vrn
Во-первых, этот запрос для темы "[Script] Копирование файлов по списку" — явный оффтоп. Разницу между копированием и поиском понимать следует даже новичку.
Во-вторых, сходные проблемы многократно обсуждались в разных темах, и это легко обнаруживается поиском по форуму. Примеры по первой из ссылок, которые дал Flasher — и далее. А также — обязательно — здесь и здесь. Это и есть ответы на заданный вопрос.
Замечание за нарушение правил форума.

#92:  Author: qwerty PostPosted: Mon Sep 23, 2013 18:52
    —
Что-то у меня не получается, выдает сообщение "Ничего не удалось скопировать".
Создал кнопку, пишу параметр...
Нужно
Quote:
* Копирование файлов\папок из файла-списка в противоположную панель ТС:

{файл-список} "%T" [{режим копирования}]


В поле "Параметры" пишу
"E:\qqq.txt" "E:\"
или
"E:\qqq.txt" "E:\" "1"
Выдает одну и ту же ошибку.
Подскажите что не так?

#93:  Author: FlasherLocation: Москва PostPosted: Mon Sep 23, 2013 19:17
    —
qwerty
Файл-список в какой кодировке сохранён?
"1" - кавычки не нужны.

#94:  Author: qwerty PostPosted: Mon Sep 23, 2013 20:11
    —
Flasher
ansi 1251
utf8
utf8 без BOM
не работает.

#95:  Author: FlasherLocation: Москва PostPosted: Mon Sep 23, 2013 22:43
    —
qwerty
Список должен быть только в ANSI.
1. А на большую глубину копируются?
2. Диск Е локальный?

#96:  Author: qwerty PostPosted: Mon Sep 23, 2013 23:00
    —
Flasher
Диск E локальный.
Я для теста все просто делаю. На C создал папку, туда положил файлы, в корень С список в txt формате, кодировка ANSI, в нем указаны имена файлов, которые надо скопировать, каждое с новой строки, имена с расширением. Указал копировать на Е.

Добавлено спустя 5 минут:


#97:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Sep 23, 2013 23:37
    —
qwerty
В таких случаях приводится код кнопки. Картинка не нужна абсолютно.

#98:  Author: FlasherLocation: Москва PostPosted: Tue Sep 24, 2013 00:04
    —
qwerty wrote:
* Копирование файлов\папок из файла-списка в противоположную панель ТС:
У меня то ли со зрением проблемы, то ли кто-то поменял название, но я не вижу в этой ветке скрипт с точно таким названием.
Идём в памятку и действуем, как описано в первых пунктах при ошибке.
qwerty wrote:
в нем указаны имена файлов
А пути к этим именам куда подевались? Или предлагается скрипту телепатическим путём их подставлять?
Справка wrote:
%L Длинные имена файлов, включая полный путь, например, c:\Program Files\Long name.exe.

#99:  Author: qwerty PostPosted: Tue Sep 24, 2013 00:29
    —
Flasher
Имена файлов указал без пути. Да, такое первый раз делаю. Запарился.
Спасибо за помощь.

#100:  Author: Sv9zist PostPosted: Tue Dec 24, 2013 11:27
    —
День добрый. Вроде по адресу. Та же задача,но сложнее.

Имеем фаилы "базы" с путем:

а) /disk/<произвольное имя>/<пр. имя>/<пр. имя>/613.pdf
б) /disk/<произвольное имя>/<пр. имя>/613GU.pdf
в) /disk/<произвольное имя>/<пр. имя>/<пр. имя>/<пр. имя>/50-613GU.pdf

Должны получить фаилы "сборки" в таком виде:
а) /disk/Сборка/613/613.pdf
б) /disk/Сборка/613/613GU.pdf
в) /disk/Сборка/613/50-613GU.pdf

Основные моменты:
1. фаилы и папки "базы" не в коем роде не могут быть изменены, только копирование.
1. количество подкаталогов у фаилов "базы" а, б, в различное
2. адреса конечных каталогов фаилов "базы" а, б, в, изначально известны
3. имена фаилов а, б, в, "базы" различные. но имеют общую часть, в данном случае это "613".
4. Формат данных фаилов базы различен, но не более 4ех. (*.pdf взят для примера).
5. в итоге фаилы с подобными именами, с заранее известными конечными каталогами должны быть собраны в отдельных подкаталогах в одном месте виде:
/disk/Сборка/613
/disk/Сборка/624
/disk/Сборка/651
/disk/Сборка/698
6. ключевой момент в том, что итоговое количество и название папок "сборки" известны, и по их именам должен произойти поиск в известных каталогах "базы",где в свою очередь найдены фаилы с похожими именами (как у папок "сборки") и скопированы в свои папки "сборки".

Надеюсь не запутал вас.
На выполнение всех операций автоматическим путем не рассчитываю, но хотелось бы хотя бы часть алгоритма сделать автоматически. Т.к. надо скомпоновать большое количество фаилов, находящихся в разном месте, с разными именами в соответствующие папки.

#101:  Author: Lev PostPosted: Tue Dec 24, 2013 15:22
    —
[off]Купите себе блокнотик, откройте первую страницу и напишите крупно - фаЙлы[/off]

#102: Копирование по списку из файла Author: middio PostPosted: Sat Jun 02, 2018 16:01
    —
Помогите с решением. Задача такая. Есть каталог со файлами. Есть второй каталог в который часть этих файлов надо скопировать. То какие файла надо скопировать записано в текстовом файле без указания расширения файлов. Иногда в текстовом файле встречаются имена которых в исходном каталоге нет и тогда надо знать каких файлов нет. Иногда одно и тоже имя может встречаться не один раз и тогда файл надо скопировать столько раз сколько он встречается переименовывая файл добавляя _1 _2 _3 и т.д.
А главное операцию эту надо делать часто и сейчас я это делаю вручную, а хочется чтоб это было делать быстро и удобно. Помогите!

#103:  Author: FlasherLocation: Москва PostPosted: Sat Jun 02, 2018 16:42
    —
middio
Как ваш вопрос к ТС относится?

#104:  Author: middio PostPosted: Sat Jun 02, 2018 23:21
    —
Неужели не относится ни коим образом? Подскажите тогда, возможно есть другое решение? Мне подойдет любое удобное в использовании.

#105:  Author: FlasherLocation: Москва PostPosted: Sat Jun 02, 2018 23:42
    —
Это вы должны знать, каким, раз на этот форум обратились. Я про решения не писал. Я спросил про ТС. Вы пишите про конкретные папки или текущие в панелях ТС?

#106:  Author: middio PostPosted: Sun Jun 03, 2018 19:08
    —
Я имел в виду текущие папки в ТС.

#107:  Author: FlasherLocation: Москва PostPosted: Sun Jun 03, 2018 21:52
    —
middio wrote:
тогда файл надо скопировать столько раз сколько он встречается переименовывая файл
Какова цель сего действа?

#108:  Author: middio PostPosted: Mon Jun 04, 2018 00:25
    —
Дело в том, что это файлы фотографий которые дальше надо отправлять в печать, и чтоб напечаталось необходимое количество нужно иметь соответствующее число копий. На фотографии на обороте печатается название файла, поэтому чтоб имя соответствовало при переименовании и надо добавлить номер копии _1

#109:  Author: FlasherLocation: Москва PostPosted: Mon Jun 04, 2018 01:57
    —
middio
Обязательно в формате _№ ? И почему не сразу выводить на печать? У нас есть топики по печати.

Я уже делал с похожим запросом, только там копировалась структура папки, а не только то, что в корне. Это не надо?
А почему не симлинки/хардлинки? Место не хотите сэкономить?

#110:  Author: middio PostPosted: Mon Jun 04, 2018 10:58
    —
_№ это только как вариант. Подчерк или минус я использую для визуального отделения копии от оригинального имени. И для того чтоб не нарушать очередность файлов при сортировке файлов в каталоге по имени порядковый номер добавляю после имени файла.
Структура папки не нужна. Файлы из одной выбранной папки копируются во вторую выбранную.
Жесткие ссылки прекрасно подходят

#111:  Author: FlasherLocation: Москва PostPosted: Mon Jun 04, 2018 20:35
    —
А расширения у файлов какие?

P.S.: Посты тут принято знаком препинания завершать.

#112:  Author: middio PostPosted: Tue Jun 05, 2018 00:00
    —
разширения jpg

#113:  Author: FlasherLocation: Москва PostPosted: Tue Jun 05, 2018 01:35
    —
Quote:
TOTALCMD#BAR#DATA
%ComSpec% /q /v:on /c for /f "delims=" %# in ('type "
%COMMANDER_PATH%\Print\ImagesList.txt"^|sort') do if exist "%#.jpg" (if /i not "%#"=="!n!" set c=""&set s="")&mklink /h
"%T%%#!s!!c!.jpg" "%%#.jpg"&set /a c+=1&set s=_&set "n=%%#"
syncui.dll,12

Создать жёсткие ссылки в папке пассивной панели к|jpg-файлам папки активной по списку базовых имён

1

Вариант для разных томов:
Quote:
TOTALCMD#BAR#DATA
%ComSpec% /q /v:on /c set "h= "&set
"T=%T"&(if /i "!cd:~,1!"=="!T:~,1!" set "h= /h ")&for /f "delims=" %%# in ('type "
!COMMANDER_PATH!\Print\ImagesList.txt"^|sort') do if exist "%%#.jpg" (if /i not "%%#"=="!n!" set c=""&set s="")&mklink!h!"%T%%#!s!!c!.jpg" "%P%%#.jpg"&set /a c+=1&set s=_&set "n=%%#"
syncui.dll,12

Создать жёсткие (в том же томе диска) или символьные ссылки в папке|пассивной панели к jpg-файлам папки активной по списку базовых имён

1

Путь к ImagesList.txt писать, разумеется, свой.

#114:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Jun 05, 2018 06:58
    —
middio
Вам уже про завершающие точки в постах было сказано открытым тектом. Вы нарушаете правила форума.

#115:  Author: middio PostPosted: Wed Jun 06, 2018 01:42
    —
Про знаки препинания спасибо, что написали. Буду внимательнее.

Добавлено спустя 1 час 34 минуты:

Flasher, спасибо вам огромное. Очень упростит мне жизнь.
Хочу два момента уточнить.
Первое - это я в первом посте писал, о том что если в каталоге с файлами нет файла из списка, то мне нужно знать какого файла или каких файлов нет. Возможно это уже реализовано, и я просто не разобрался. Можно имена отсутствующих файлов записать в текстовый файл и положить его в пассивную панель. Например error.txt.
И второе. Было бы удобно если файл ImagesList.txt размещался всегда в каталоге куда будут копироваться файла. Я не пойму как прописать путь к файлу находящимся в пассивной панели ТС.
И еще раз огромное спасибо!

#116:  Author: FlasherLocation: Москва PostPosted: Wed Jun 06, 2018 03:33
    —
Пож-та.
middio wrote:
Возможно это уже реализовано, и я просто не разобрался.
Нет. Со слов "надо знать" я понять, что вы имели в виду сохранение в текстовый файл, не мог. Какой вариант выбран?
middio wrote:
Я не пойму как прописать путь к файлу находящимся в пассивной панели ТС.
%TImagesList.txt для второго варианта. Параметры описаны в справке (F1 при правке кнопки).

#117:  Author: middio PostPosted: Wed Jun 06, 2018 14:50
    —
Про отсутствующие в каталоге файлы: надо записать их имена в текстовый файл error.txt и положить этот файл в пассивную панель.

#118:  Author: FlasherLocation: Москва PostPosted: Wed Jun 06, 2018 16:10
    —
Flasher wrote:
Какой вариант выбран?

#119:  Author: middio PostPosted: Wed Jun 06, 2018 17:59
    —
Прошу прощения, не понял о каком варианте была речь. Второй вариант, для разных томов.

#120:  Author: FlasherLocation: Москва PostPosted: Wed Jun 06, 2018 19:29
    —
Code:
TOTALCMD#BAR#DATA
%ComSpec% /q /v:on /c set "h= "&set
"T=%T"&echo->"%Terrors.txt"&cls&(if /i "!cd:~,1!"=="!T:~,1!" set "h= /h ")&for /f "delims=" %%# in ('type "%TImagesList.txt"^|sort') do (if exist "%%#.jpg" ((if /i not "%%#"=="!n!" set c=""&set s="")&mklink!h!"%T%%#!s!!c!.jpg" "%P%%#.jpg"&set /a c+=1&set s=_) else if /i not "%%#"=="!n!" echo+%%#.jpg>>"%Terrors.txt")&set "n=%%#"
syncui.dll,12
Создать жёсткие (в том же томе диска) или символьные ссылки в папке|пассивной панели к jpg-файлам папки активной по списку базовых имён

1

#121:  Author: middio PostPosted: Wed Jun 06, 2018 20:10
    —
Flasher, огромное спасибо! Все работает! Просто супер! Very Happy

#122:  Author: gunis PostPosted: Tue Nov 03, 2020 18:44
    —
Всем привет! Братцы, подскажите пожалуйста, сделал всё как написано на стр.1

TCMD 8.51
1. создал файл с расширением vbs и вставил в него код
2. создал на панели управления TCMD кнопку, нажал изменить и вписал путь к файлу vbs, файлу с списком файлов в котором полные пути к копируемым файлам и путь куда копируем.
3. для точности файл vbs и файл с списком положил прям в папку с файлами в которой и должен происходить поиск.
4. В файле с списком для точности указал полные пути к искомым файлам
Т.к. не опытнен есть затруднение понятия запуска процесса и если я правильно понял - должен быть открыт (например в левом окне TCMD) каталог в котором ищем по списку и файлы в этом каталоге выделяем "типа ищем из этого", "куда класть результат" указано в пути в кнопке, остается нажать кнопку.
После нажатия вылезает ошибка сценария vbs скрипта

строка 107
символ 5
Ошибка: Несоответстиве типа: 'CopyMode'
Код: 800A000D
Источник: Ошибка выполнения Microsoft VBScript

открыл скрипт блокнотом, в строке 107 символ №5 буква t в слове Not

Подскажите где ошибка, что ни так сделал ?
ссылку на скрин в файлообменник "радикал" новичкам форум не дает ставить ((( поэтому поставил ее в свой профиль в раздел "откуда"

Заранее благодарен

#123:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Nov 03, 2020 20:48
    —
gunis
Что делать со ссылками на форуме новичкам, говорилось 100500 раз, учитесь пользоваться поиском. Ссылку даю в своём посте, в личных данных из "откуда" её немедленно уберите. Совершенно порнографический результат, полагаю, виден отчётливо. До такого "креатива" тут ещё никто не додумывался за всё время истории форума. Даю как модератор 24 часа на наведение порядка, иначе просто удалю пост.
Скриптами и кнопками надо уметь пользоваться. Вы, судя по результатам, не умеете совсем. Как оформляются претензии по скриптам, сказано в памятке подфорума. Ваш текст с этим близко не лежал. Впрочем, начать надо с того, что как минимум в параметрах кнопки на картинке вместо ясно указанных в шапке скрипта параметров вызова — тихий ужас. В таком виде это в принципе не может работать.

#124:  Author: ParazitLocation: Россия PostPosted: Wed Nov 04, 2020 02:29
    —
В третьем параметре совершенно не нужны квадратные скобки.

Надо писать:

1 вместо [1]

И путь запуска не надо указывать.

#125:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Nov 04, 2020 09:42
    —
Parazit
Вот именно (если необязательный параметр 1 вообще нужен, в чём я, учитывая прочую информацию, как-то не особо уверен).

gunis
Сначала обычно изучают базовые функции программы (в частности, правила создания кнопок, в т.ч. по справке), потом, если их не хватает, пытаются пользоваться скриптами (даже очень хорошо пояснёнными, как в данном случае). Не наоборот.
Теперь о вашей замечательной ссылке — уже в содержательном плане. Коды кнопок приводится на форуме в текстовом виде, сообщения об ошибке скрипта — тоже (все методики многократно описаны). Особой надобности в скрине файловых панелей как-то не улавливаю. Хотя он вкупе со скрином файла-списка вызывает, например, вопрос, зачем для копирования двух файлов из четырёх выделенных создавать готовый файл-список, аналог которого сама программа при определённых параметрах создаёт и удаляет автоматически для выделенных файлов.
Впрочем, возможно, у вас свои соображения, а файл-список тестовый. Но напомню, что что в простейшем варианте использования скрипта можно обойтись и без его явного создания (с %L и с выделением имён копируемых файлов). А вместо точного указания "куда копировать" обычно удобнее универсальный вариант с путём неактивной панели ("%T" в натуральном виде). Кстати, при точном указании такого пути без пробелов кавычки (в отличие от самого параметра) излишни. Глупостями же с размещением файла скрипта в исходной папке при наличии к нему полного пути в кнопке заниматься вообще не надо.
И чисто для сведения: версия TC 8.51а была выпущена весной 2016 года, а с тех пор в программе появилось ещё много полезного.



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group