Скрипт, использующий "загрузку имен из файла"

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

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

Ответить
Georgе
Сообщения: 99
Зарегистрирован: Вт авг 28, 2007 06:00

Скрипт, использующий "загрузку имен из файла"

Сообщение Georgе »

Помогите,пожалуйста, написать скрипт, который бы делал следующее:
я устанавливаю в панелях исходную и целевую папки, нажимаю кнопочку, и файлы из одной папки переписываются поверх файлов того же размера из другой, но не под своими именами, а под именами перезаписанных. (нужно мне это для поддержки чужих закачек в торренте).
Предполагаю, что решать это надо с привлечением группового переименования и имеющегося там пункта "загрузки имен из файла".
Georgе
Сообщения: 99
Зарегистрирован: Вт авг 28, 2007 06:00

Сообщение Georgе »

Подъем темы (в связи с падением форума).
Аватара пользователя
LocKtaR-o-DarK
Сообщения: 349
Зарегистрирован: Пт авг 12, 2005 04:20
Откуда: Москва
Контактная информация:

Сообщение LocKtaR-o-DarK »

Georgе, конкретизируй задачу, приведи примеры файлов, может что-нить и придет в голову, а так описание задачи немного расплывчато
Изображение    Изображение    Изображение
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Georgе
При совпадении размера файлов содержимое отличается?
Нет, я не сплю. Я просто медленно моргаю.
Georgе
Сообщения: 99
Зарегистрирован: Вт авг 28, 2007 06:00

Сообщение Georgе »

Batya В целевой директории содержимое файлов полностью или частично нули. (так поступает торрент-клиент, кладет на диск "болванки" будущих файлов, забитые нулями).

LocKtaR-o-DarK Возможные случаи когда это может пригодиться - mp3,iso,архивы. Просто iso ввиду малочисленности можно и руками переименовать, а вот медиа-файлы, разбросанные по разным папкам,переименовывать руками уже сложно, нужен скрипт.
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Батник с параметрами %P %T не пойдет?
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Georgе
Сообщения: 99
Зарегистрирован: Вт авг 28, 2007 06:00

Сообщение Georgе »

Думаю, не подойдёт. Как я могу указать такому батнику какой файл перезаписывать каким? Критерий - совпадающий размер. Но как его проверить в батнике ?
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

Georgе писал(а): Критерий - совпадающий размер.
А что если файлов с одинаковым размером будет несколько, хотя бы два? Что должен делать скрипт в этом случае? И, кроме этого, я так и не понял, у целевых файлов будут меняться имена в соответствии с именами файлов в панели-источнике или имена останутся прежними, а будет заменено тоьлко содержимое, взятое из файлов-источников :?:

Согласен я с LocKtaR-o-DarK, привел бы ты лучше конкретный пример.
Georgе
Сообщения: 99
Зарегистрирован: Вт авг 28, 2007 06:00

Сообщение Georgе »

Volniy писал(а):
Georgе писал(а): Критерий - совпадающий размер.
А что если файлов с одинаковым размером будет несколько, хотя бы два? Что должен делать скрипт в этом случае?
Тогда скрипт перепишет один-два файла "неправомерно". Бог с ним, торрент-клиент распознает это при перехэшировании.

Пример: две папки с мп3. В целевой директории имена кириллицей, содержимое-нули. В исходной -имена латиницей, содержимое-нормальные мп3. Надо получить в целевой нормальные мп3 с теми же именами, что были у "зануленных", то есть кириллические. (Пример частный. Плагин-транслитератор не предлагать. Это могут быть просто имена с проверенной и непроверенной орфографией, и т.д.)
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Georgе
vbs-скрипт:

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

'=============================================================================
' Замена содержимого файлов одной папки содержимым файлов другой папки
'   при совпадении у файлов размеров

' Должно быть 2 входных параметра - исходная папка (откуда копировать) и
'   целевая папка (куда копировать)
' Пример параметров в TC:
'   "%P" "%T"
'=============================================================================
Option Explicit
' Проверяем число параметров
If WScript.Arguments.Count < 2 Then
  MsgBox "Неправильно заданы параметры!", _
    vbOKOnly + vbCritical, _
    "Замена содержимого файлов"
  WScript.Quit
End If

Dim FSO, SourceDir, TargetDir

Set FSO   = CreateObject("Scripting.FileSystemObject")
SourceDir = WScript.Arguments(0)
TargetDir = WScript.Arguments(1)

If Not FSO.FolderExists(SourceDir) Then
  MsgBox "Неправильно задана исходная папка!", _
    vbOKOnly + vbCritical, _
    "Замена содержимого файлов"
  Set FSO = Nothing
  WScript.Quit
End If

If Not FSO.FolderExists(TargetDir) Then
  MsgBox "Неправильно задана целевая папка!", _
    vbOKOnly + vbCritical, _
    "Замена содержимого файлов"
  Set FSO = Nothing
  WScript.Quit
End If

Dim F, SizeArr, i, TargetFile

Set SizeArr = CreateObject("Scripting.Dictionary")

For Each F In FSO.GetFolder(SourceDir).Files
  On Error Resume Next
  SizeArr.Add F.Size, F.Path
  If Err.Number <> 0 Then
    MsgBox "В исходной папке несколько файлов имеют одинаковый размер." & vbNewLine &_
      "Невозможно однозначное соответствие!", _
      vbOKOnly + vbCritical, _
      "Замена содержимого файлов"
    Set F       = Nothing
    Set FSO     = Nothing
    Set SizeArr = Nothing
    WScript.Quit
  End If
  On Error Goto 0
Next

i = 0
For Each F In FSO.GetFolder(TargetDir).Files
  TargetFile = SizeArr(F.Size)
  If FSO.FileExists(TargetFile) Then
    FSO.CopyFile TargetFile, F.Path, True
    i = i + 1
  End If
Next

MsgBox "Выполнена замена содержимого " & i & " файлов.", _
  vbOKOnly + vbInformation, _
  "Замена содержимого файлов"

Set F       = Nothing
Set FSO     = Nothing
Set SizeArr = Nothing
WScript.Quit
Нет, я не сплю. Я просто медленно моргаю.
Ответить