WSH + TCScript = мощное средство автоматизации TC!

Форум о самом популярном файловом менеджере Total Commander

Сообщение Evgenych » Вт авг 17, 2004 10:09 am

<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->
Захожу в любой архив (zip или rar), выделяю файл и нажимаю F9. Выскакивает ошибка "Эта функция в архивах не работает".
Я уже не знаю даже что и думать.
<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->

Если в параметрах команды из меню Start присутстствует символ "%" и, находясь в архиве, запускаешь команду, то выдается сообщение "Эта функция в архивах не работает" независимо от того, какая команда прописана (только что проверил).
ИМХО, никакие параметры (%n, %p, %f и т.д.) в этом случае нельзя передать.
Evgenych
Прапор
 
Сообщений: 66
Зарегистрирован: Пт июл 11, 2003 3:38 pm
Пункты репутации: 0

Сообщение poiuytr » Вт авг 24, 2004 7:57 pm

<a href='http://www.microsoft.com/technet/scriptcenter/repository.mspx' target='_blank'>Скриптохранилище microsofta</a>
Hasta la victoria siempre!
poiuytr
Капитан
 
Сообщений: 233
Зарегистрирован: Ср авг 14, 2002 6:04 pm
Откуда: Рига, Латвия
Пункты репутации: 0

Сообщение Evgenych » Ср авг 25, 2004 5:02 pm

<!--QuoteBegin-poiuytr+Aug 25 2004, 01:57--><div class='quotetop'>QUOTE(poiuytr @ Aug 25 2004, 01:57)</div><div class='quotemain'><!--QuoteEBegin--><a href='http://www.microsoft.com/technet/scriptcenter/repository.mspx' target='_blank'>Скриптохранилище microsofta</a>
<!--QuoteEnd--></div><!--QuoteEEnd-->

<a href='http://download.microsoft.com/download/c/a/b/cabad822-b7eb-4815-928c-e59a9f2fafec/script_center_repository.exe' target='_blank'>CHM-формат</a>
Последний раз редактировалось Evgenych Ср авг 25, 2004 5:04 pm, всего редактировалось 1 раз.
Evgenych
Прапор
 
Сообщений: 66
Зарегистрирован: Пт июл 11, 2003 3:38 pm
Пункты репутации: 0

Сообщение Egorus » Вт сен 07, 2004 5:57 am

Люди подкиньте идею как реализовать следующее:
переименование filename.ext -> Filename.ext

видимо нужно грузить список файлов и вычитывать по одной строчки, кот. каким то образом обрабатывать...
И еще как сделать чтобы скрипт применялся и к вложенным файлам папкам?
Последний раз редактировалось Egorus Вт сен 07, 2004 5:59 am, всего редактировалось 1 раз.
Egorus
Ст. сержант
 
Сообщений: 38
Зарегистрирован: Чт июн 05, 2003 10:03 am
Пункты репутации: 0

Сообщение Rulchik » Вт сен 07, 2004 11:53 am

2Egorus
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->Люди подкиньте идею как реализовать следующее:
переименование filename.ext -> Filename.ext<!--QuoteEnd--></div><!--QuoteEEnd-->Не понял... Это реализовано в штатном тоталовском "переименователе".
<span style='font-size:8pt;line-height:100%'><span style='color:darkblue'>Меняю два стакана анаши на обратный билет с Марса :).</span></span>
Rulchik
Генерал-майор
 
Сообщений: 2242
Зарегистрирован: Сб апр 13, 2002 10:53 am
Откуда: Saint-Petersburg
Пункты репутации: 0

Сообщение Egorus » Вт сен 07, 2004 12:41 pm

2Rulchik
знаю, что есть, но как это повесить на хоткей я не нашел
Egorus
Ст. сержант
 
Сообщений: 38
Зарегистрирован: Чт июн 05, 2003 10:03 am
Пункты репутации: 0

Сообщение Batya » Вт сен 07, 2004 1:52 pm

2Egorus
Не очень пока силен в написании скриптов. Но для одного файла вот что можно использовать:
Код: выделить все
Dim TCS
Set TCS = CreateObject("TCSCRIPT.Helper")
oldName = TCS.GetSelectedFiles
newName = UCase(Left(oldName,1)) & Mid(oldName,2)
TCS.SetTextToClip(newName)
TCS.SendCommand(1002)
TCS.SendKeystroke(TCS.GetTextFromClip)
TCS.SendKeystroke("{Enter}")

P.S. В wincmd.ini в разделе [Configuration] должно быть прописано (либо вообще не определен параметр):
RenameSelOnlyName=0
Batya
Ст. лейтенант
 
Сообщений: 146
Зарегистрирован: Вт апр 29, 2003 8:28 am
Откуда: Москва
Пункты репутации: 0

Сообщение Batya » Вт сен 07, 2004 2:28 pm

Гм...
Что-то я перемудрил - в клип, потом из клипа ... <!--emo&<_<-->[img]style_emoticons/<#EMO_DIR#>/dry.gif[/img]<!--endemo-->
Надо совсем убрать:
Код: выделить все
TCS.SetTextToClip(newName)

И немного поправить ниже:
Код: выделить все
TCS.SendKeystroke(newName)
Batya
Ст. лейтенант
 
Сообщений: 146
Зарегистрирован: Вт апр 29, 2003 8:28 am
Откуда: Москва
Пункты репутации: 0

Сообщение Volniy » Вт сен 07, 2004 11:02 pm

2Batya
Ну и впрямь "перемудрил" <!--emo&:P-->[img]style_emoticons/<#EMO_DIR#>/tongue.gif[/img]<!--endemo-->

Если уж действительно хочется через скрипт, а не через встроенную утилиту пакетного переименования (что было бы вполне удобно и логично), то TC Script Helper тут не нужен и даже вреден <!--emo&:)-->[img]style_emoticons/<#EMO_DIR#>/smile.gif[/img]<!--endemo-->. Подключи в скрипт FSO и для каждого объекта типа File изменяй его свойство Name, например, так же как это сделано у тебя:
Код: выделить все
SomeFile.Name = UCase(Left(SomeFile.Name, 1)) & Mid(SomeFile.Name, 2)

А вообще-то скрипты imho имеет смысл применять только в случаях, когда нужно проделывать некую операцию с какими-то определенными файлами, например имеющими размер, кратный 33 или там созданными в пятницу после обеда <!--emo&:)-->[img]style_emoticons/<#EMO_DIR#>/smile.gif[/img]<!--endemo-->
Volniy
Ст. лейтенант
 
Сообщений: 121
Зарегистрирован: Сб ноя 22, 2003 11:42 pm
Пункты репутации: 0

Сообщение Batya » Ср сен 08, 2004 6:58 am

2Volniy
<!--QuoteBegin-Volniy+--><div class='quotetop'>QUOTE(Volniy)</div><div class='quotemain'><!--QuoteEBegin-->Если уж действительно хочется через скрипт, а не через встроенную утилиту пакетного переименования (что было бы вполне удобно и логично), то TC Script Helper тут не нужен и даже вреден <!--QuoteEnd--></div><!--QuoteEEnd-->
А как получить список выделенных в TC файлов, не используя GetSelectedFiles из TCSCRIPT.Helper?
Batya
Ст. лейтенант
 
Сообщений: 146
Зарегистрирован: Вт апр 29, 2003 8:28 am
Откуда: Москва
Пункты репутации: 0

Сообщение Volniy » Ср сен 08, 2004 8:53 am

<!--QuoteBegin-Batya+Sep 8 2004, 09:58--><div class='quotetop'>QUOTE(Batya @ Sep 8 2004, 09:58)</div><div class='quotemain'><!--QuoteEBegin-->А как получить список выделенных в TC файлов, не используя GetSelectedFiles из TCSCRIPT.Helper?
<!--QuoteEnd--></div><!--QuoteEEnd-->
Обыкновенно: передать в командную строку имя файла со списком выделенных файлов (параметры %L, %l, %F, %f, %D, %d). Но ведь изначально человек спрашивал:<!--QuoteBegin-Egorus+--><div class='quotetop'>QUOTE(Egorus)</div><div class='quotemain'><!--QuoteEBegin-->И еще как сделать чтобы скрипт применялся и к вложенным файлам папкам?<!--QuoteEnd--></div><!--QuoteEEnd-->
поэтому я и предполагал не выделенные файлы, а именно рекурсивный обход начиная с некоторой исходной папки.
В любом случае лучше переименовывать файлы напрямую, нежели чем посылать команды для этого Тоталу. Да и быстрее, кстати, тоже.
Volniy
Ст. лейтенант
 
Сообщений: 121
Зарегистрирован: Сб ноя 22, 2003 11:42 pm
Пункты репутации: 0

Сообщение Batya » Ср сен 08, 2004 11:34 am

2Volniy
Спасибо за советы. Пока вот что получилось:
Код: выделить все
Set Args = WScript.Arguments
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TempFile = FSO.OpenTextFile(Args(0), 1)

Do While Not TempFile.AtEndOfStream
 Set SelFile = FSO.GetFile(TempFile.ReadLine)
 NewName = UCase(Left(SelFile.Name, 1)) & Mid(SelFile.Name, 2)
 SelFile.Name = NewName & 1
 SelFile.Name = NewName
Loop

Надо запускать с каким-нибудь ключем, например, %L (кстати, подскажи, в чем их точное различие?). Пока работает только для выделенных файлов, не работает для папок и, естественно, для файлов в них. Почему-то не работает прямое переименование, поэтому приходится в коде прописывать двойное переименование.
А по поводу файлов в папках... Egorus ведь писал <!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->И еще ...<!--QuoteEnd--></div><!--QuoteEEnd--> <!--emo&B)-->[img]style_emoticons/<#EMO_DIR#>/cool.gif[/img]<!--endemo-->
Batya
Ст. лейтенант
 
Сообщений: 146
Зарегистрирован: Вт апр 29, 2003 8:28 am
Откуда: Москва
Пункты репутации: 0

Сообщение Ti-Mac » Ср сен 08, 2004 11:53 am

Код: выделить все
' файл UСase.vbs
' параметр %F
' работает с выделенными файлами в текущем каталоге

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")

Dim old_name, i, File

Set File = fso.OpenTextFile(WScript.Arguments(0))
old_name = File.ReadAll
File.Close

old_name = Split(old_name,vbNewLine)

for i = 0 to UBound(old_name) - 1

 fso.movefile old_name(i), UCase(left(old_name(i),1)) & mid(old_name(i),2)

next

wscript.quit
<span style='color:blue'>Formating C: .................98%</span>
<span style='color:red'>Fatal Error:</span> <span style='color:blue'>found Windows</span>
Ti-Mac
Капитан
 
Сообщений: 168
Зарегистрирован: Вс апр 18, 2004 8:18 am
Откуда: Кемерово
Пункты репутации: 0

Сообщение Volniy » Ср сен 08, 2004 1:08 pm

Параметры для получения списков выделенных файлов:
  • %L
    Длинные имена файлов с полными путями к ним, например c:\Program Files\Long name.exe</li>
  • %l
    Короткие имена с полным путем, например C:\PROGRA~1\LONGNA~1.EXE</li>
  • %F
    Длинные имена без путей, например Long name.exe</li>
  • %f
    Короткие имена без путей, например LONGNA~1.EXE</li>
  • %D
    Короткие имена с полными путями, используется набор символов DOS</li>
  • %d
    Короткие имена без путей, используется набор символов DOS.</li>
Для скриптов удобнее всего использовать первые два (они аналогичны). Хотя во многих случаях и только имен хватит (%F и %f).
Два последних нужны для передачи списка файлов в командную строку ДОС-овской программы.

А что касается неработоспособности свойства Name в этом случае, то дело в следующем: для файловой системы (Windows) Filename.ext и filename.ext - это одинаковые имена, поэтому, собственно, и переименовывать тут нечего.

Прав Ti-Mac: fso.movefile рулит! <!--emo&:)-->[img]style_emoticons/<#EMO_DIR#>/smile.gif[/img]<!--endemo-->
Volniy
Ст. лейтенант
 
Сообщений: 121
Зарегистрирован: Сб ноя 22, 2003 11:42 pm
Пункты репутации: 0

Сообщение Batya » Чт сен 09, 2004 9:13 am

Подскажите, пожалуйста, что можно использовать вместо FSO.CopyFile для копирования группы файлов по маске без копирования файлов во вложенных каталогах?
А то FSO.CopyFile у меня ругается при наличии в каталоге назначения копируемого файла даже при указании третьего параметра False, а мне нужна именно дописка без перезаписи.
Да и вообще по сравнению с xcopy в батниках синтаксис FSO.CopyFile не очень то и богат <!--emo&:(-->[img]style_emoticons/<#EMO_DIR#>/sad.gif[/img]<!--endemo-->
Batya
Ст. лейтенант
 
Сообщений: 146
Зарегистрирован: Вт апр 29, 2003 8:28 am
Откуда: Москва
Пункты репутации: 0

Пред.След.

Вернуться в Total Commander

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21

cron