Создание копий файлов с заданными в списке именами

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Ответить
midasinc
Сообщения: 25
Зарегистрирован: Пт апр 17, 2009 17:12

Создание копий файлов с заданными в списке именами

Сообщение midasinc »

У меня уже была похожая проблема, ее помогли решить - http://forum.wincmd.ru/viewtopic.php?t= ... highlight=

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

Например:
1. В каталоге находятся 2 файла:
P1_2_1.pdf
P1_2_7.pdf

Есть список в текстовом файле (можно в любом другом):
P1_2_1.pdf TC4430N
P1_2_1.pdf TC4430N-FM
P1_2_1.pdf TC4430N-SF
P1_2_7.pdf TC4436N
P1_2_7.pdf TC4436N-FM
P1_2_7.pdf TC4436N-SF

На выходе нужно получить следующие файлы:
TC4430N.pdf
TC4430N-FM.pdf
TC4430N-SF.pdf
TC4436N.pdf
TC4436N-FM.pdf
TC4436N-SF.pdf

Помогите, пожалуйста, как это возможно сделать? Проблема в том что файлов сотни в списке, вручную это очень долго получается.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Код: Выделить всё

'==============================================================================
' Копировать выделенные файлы при совпадении их полных имён с началом строк
' в файле-списке и переименовывать базовые имена копий в оставшиеся части строк

' Параметры: %F "<путь к файлу списку>" "<путь назначения>"
'==============================================================================
With WScript.Arguments
  If .Count = 0 Then WScript.Quit
  FList = .Item(0)
  NList = .Item(1)
  Path  = .Item(2)
  If Right(Path, 1) <> "\" Then Path = Path & "\"
End With
With CreateObject("Scripting.FileSystemObject")          
  For Each F in Split(.OpenTextFile(FList).ReadAll, vbNewLine)
    If F > vbNullString And .FileExists(F) Then
      Ext = .GetExtensionName(F)
      For Each Fn in Split(.OpenTextFile(NList).ReadAll, vbNewLine)
        Fn = Trim(Fn)
        If Fn <> "" And Left(Fn, Len(F)) = F Then _
        .CopyFile F, Path & LTrim(Mid(Fn, InStrRev(Fn, vbTab)+1)) & "." & Ext
      Next
    End If
  Next
End With
Последний раз редактировалось Flasher Чт ноя 03, 2011 20:02, всего редактировалось 2 раза.
midasinc
Сообщения: 25
Зарегистрирован: Пт апр 17, 2009 17:12

Сообщение midasinc »

Все перепроверил, но выдает почему-то такую ошибку:
Изображение
TC версий 7.55a и 8.0 beta 7.

Где я ошибся?
Последний раз редактировалось midasinc Чт ноя 03, 2011 19:25, всего редактировалось 1 раз.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

На строку параметров можно посмотреть?
midasinc
Сообщения: 25
Зарегистрирован: Пт апр 17, 2009 17:12

Сообщение midasinc »

Вот такую кнопку сделал:

Код: Выделить всё

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Scripts\CreateCopiesFilesWithNamesFromList.vbs
%F "d:\Projekt\_DATA\PDF\Copy&Rename\namefiles.txt" "d:\Projekt\_DATA\PDF\Copy&Rename\OUT"
Button.dll,44
Создание копий файла с именами из файла-списка


-1
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Хм. А файлы тоже на d: расположены?
midasinc
Сообщения: 25
Зарегистрирован: Пт апр 17, 2009 17:12

Сообщение midasinc »

Да, в папке "Copy&Rename"
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Файл со списком в ANSI сохранён?
midasinc
Сообщения: 25
Зарегистрирован: Пт апр 17, 2009 17:12

Сообщение midasinc »

Все заработало, я разобрался, проблема была в том, что в файле со списками колонки были разделены табуляцией. После замены на пробел все заработало.
Большое спасибо.
А нельзя ли как-то обойти эту проблему?
Список копируется из Excel и табуляция автоматически вставляется, при большом количестве файлов тоже многовато вручную удалять/добавлять получается.

И да файл сохранен в ANSI, это может быть проблемой?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Ну, об этом надо было сразу писать, тут-то я вижу пробелы. Сделал. Работать будет при условии, что нет начальной и конечной табуляции.

В ANSI и надо.
midasinc
Сообщения: 25
Зарегистрирован: Пт апр 17, 2009 17:12

Сообщение midasinc »

Да я сам как-то не заметил то что табуляция, когда стал разбираться, только тогда обратил внимание.

Все работает, очень признателен, спасибо.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Пожалуйста. Кстати, если пути несменные, то параметры можно сократить до: %F "%Pnamefiles.txt" "%POUT"
Ответить