Страница 14 из 27

Добавлено: Вт апр 27, 2010 13:47
Andrey_A
Вопрос разрешился как-то загадочно, я сам ничего не понял. Может кто-сталкивался. При установки 3-х систем Тотал оставался на месте, т.е. я его не устанавливаю, а просто копирую (в данном случае он просто был на диске с:\Total...) И во всех трёх системах происходила одна и та же ошибка. Я стал логически размышлять, а что общего между этими системами??? Прищёл к выводу - это, возможно оставшиеся файлы на диске с:\... Я посмотрел - какие-то непонятные 4 файла (Один из них, был толи tc.wc?, толи wc.tc? - откуда он взялся я не знаю). При их удалении всё заработало!!! Установки дополнительных библиотек, что только я не делал - ничего не помогало. А вот удаление - и всё OK. Как будто файл хранил какую-то информацию, блокирующую работу скрипта.

Добавлено: Вс май 09, 2010 16:25
Andrey_A
Пользуюсь скриптами с использованием Helperа - очень нравится. Недавно заметил, что скрипт, который постоянно работал, отказывался срабатывать. После долгих мучений понял что если путь или имя содержит определённые знаки, то ничего не просходит. Пример: если целевой каталог %COMMANDER_PATH%\+++\ , то команда TCS.SendKeystroke (Line) отказывается вписывать строку Line = TCS.GetTrgPath . Тестировал все имеющиеся скрипты, выяснилось и другое. Вот простой скрипт:

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

' Создание папки в соседней панели с именем файла\папки под курсором
' Параметр "%O"
Dim TCS
    Set TCS = CreateObject("TCSCRIPT.Helper")
    Name  = WScript.Arguments(0)
    Line = TCS.GetTrgPath & "\" & Name
    TCS.SendCommand "cm_MkDir"
    TCS.Pause = 200
    TCS.SendKeystroke (Line)
Set TCS = Nothing
Создайте файл Маша+Вася.txt - и пусть он будет под курсором ("+" пропадает) итог МашаПетя. А фал Маша++Вася.txt - срабатывает нормально

Маша%Вася.txt итог Машаася
Маша~Петя.txt вообще что-то непонятное
С папками обстоит дело, по-другому, но тоже..?! Cоздайте на С диске папки +, ++, +++, %, %% , %%%, ^^^ а в другой панели файл NAME.txt и поочерёдно в каждой из них создайте скриптом папку именем Name (под курсором будет файл NAME.txt)
+ итог c:\/Name а должно быть c:\+\Name
++ итог Name а должно быть c:\++\Name
...
% итог c:\Name а должно быть c:\%\Name
%% итог Name а должно быть c:\%%\Name
...
^ итог c:\Name а должно быть c:\^\Name
^^ итог Name а должно быть c:\^^\Name
...
{123} итог Name а должно быть c:\{123}\Name

Другие символы я не проверял, время не было...

Добавлено: Вс май 09, 2010 22:09
Volniy
Символы плюс (+), "крышка" (^), знак процентов (%), тильда (~) и круглые скобки ( ) имеют специальное значение. Чтобы указать передачу одного из этих символов, следует заключить его в фигурные скобки ({}). Например, знаку плюс соответствует код {+}... Фигурным скобкам соответствуют коды {{} и {}}
Это фрагмент из прилагаемого к хелперу файла "SendKeystroke.txt". Это не я придумал, это копипаст из MS документации по VB-шному методу SendKeys, который и используется в хелпере (правда, с некоторыми несущественными дополнениями и переработками). Так что эту особенность тут как-то следует учитывать.
Что касается данного конкретного случая, то я бы предпочел вообще не использовать Тотал для создания новой папки. Для этого у WSH хватает и своих методов. Например, можно вот так:

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

Dim TCS, fso, Line 
Set TCS = CreateObject("TCSCRIPT.Helper") 
Set fso = CreateObject("scripting.filesystemobject")

Line = TCS.GetTrgPath & "\" & WScript.Arguments(0)  
If fso.FolderExists(Line) = False Then fso.CreateFolder(Line)

Set TCS = Nothing
Set fso = Nothing

Добавлено: Вс май 09, 2010 23:19
Tol!k
Volniy писал(а):Что касается данного конкретного случая, то я бы предпочел вообще не использовать Тотал для создания новой папки.
В данном случае можно обойтись без хелпера. Например, на VBS, можно так:

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

' Создание папки в соседней панели с именем файла\папки под курсором
' Параметры: "%T%O"
Dim TCS, fso, Line
Set fso = CreateObject("scripting.filesystemobject")

Line = WScript.Arguments(0)
If fso.FolderExists(Line) = False Then fso.CreateFolder(Line)

Set fso = Nothing
На batch`e можно обойтись одной только кнопкой. Например так:

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

TOTALCMD#BAR#DATA
%ComSpec% /c md
"%T%O"
WCMICONS.DLL,29
Создание папки в соседней панели с именем файла\папки под курсором

1
-1

Добавлено: Пн май 10, 2010 13:57
Andrey_A
Спасибо за советы, но речь шла не о конкретном скрипте, у меня десятка два скриптов, в которых используется путь или имя под курсором, и все они в папках(++, +++) не срабатывают. Есть три варианта
1. Исправить их и Helper не использовать
2. Подправить автором как-то программу, где при команде TCS.GetTrgPath или подобной пути, имена, имеющие спец знаки читались не посимвольно, а целой строкой
3. Сделать универсальный кусок скрипта, который бы проверял имя, путь на наличие в нём спец знаков и вставлял {} вокруг них, пример
путь c:\+++\ превращался бы в c:\{+}{+}{+}\, если кто может в этом помочь помогите пожалуйста, не хотелось отказываться от Helpera

Добавлено: Пт май 14, 2010 02:36
Volniy
Andrey_A писал(а):3. Сделать универсальный кусок скрипта, который бы проверял имя, путь на наличие в нём спец знаков и вставлял {} вокруг них, пример
путь c:\+++\ превращался бы в c:\{+}{+}{+}\, если кто может в этом помочь помогите пожалуйста, не хотелось отказываться от Helpera

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

MsgBox ValidPath("c:\+++\^^\%%")

Function ValidPath(Path )
  For i=1 To Len(Path)
    s=Mid(Path,i,1)
    Select Case s
      Case "(",")","{","}","+","%","^","~"
        s="{" & s & "}"
    End Select
    ValidPath=ValidPath & s
  Next
End Function
PS И сдался вам этот хелпер...

Добавлено: Вт авг 17, 2010 15:41
Flasher
Имеем WSH.ExpandEnvironmentStrings("%TEMP%")
Предположим, путь в переменной среды сопоставлен с C:\DOCUME~1\USERNAME\LOCALS~1\Temp.
Есть ли возможность перевести путь формата 8.3 в полный?

Добавлено: Ср авг 18, 2010 11:53
Batya
Flasher писал(а):Есть ли возможность перевести путь формата 8.3 в полный?
Примерно так:

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

FolderPath = "C:\DOCUME~1\Default\LOCALS~1\Temp"
MsgBox CreateObject("Shell.Application").NameSpace(FolderPath).Self.Path

Добавлено: Ср авг 18, 2010 12:43
Flasher
Batya
Благодарю, то, что надо! :)

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

Set SA = CreateObject("Shell.Application")
TMP = WSH.ExpandEnvironmentStrings("%TEMP%")
Path = SA.NameSpace(TMP).Self.Path

Добавлено: Пт окт 01, 2010 03:59
Flasher
Ищу мягкий метод, который позволит менять местами выделенные файлы и папки в панелях с учётом совпадения некоторых по маске (без переименования), а также всё содержимое этих панелей. Пока безрезультатно. Кто-нибудь может подсказать, куда смотреть?

Добавлено: Пт окт 01, 2010 14:20
Batya
Flasher
Если имена совпадают, думаю, что без переноса в промежуточный каталог или предварительного переименования не обойтись.

Добавлено: Пт окт 01, 2010 14:23
Flasher
Batya
Ну если тебе такие чудеса не известны, то придётся клепать с тем, что есть. Кстати, буду рад подключению, если времечко имеется. :wink:

Добавлено: Ср окт 06, 2010 02:41
Andrey_A
В Helper есть функция SetTextToClip(Text) - отправить текст в буфер обмена. Есть ли возможность отправлять в буфер текст чем либо ещё в скриптовом формате? Дело в том, что при большом куске текста, эта функция не срабатывает.

Добавлено: Ср окт 06, 2010 04:39
Flasher
Если из файла, то объект FileSystemObject > объект TextStream > метод ReadAll

А тут описывается способ при наличии IE в системе.

Добавлено: Ср окт 06, 2010 06:33
Andrey_A
с FileSystemObject > объект TextStream > метод ReadAll у меня проблем нет. Я это уже освоил, но вот с IE наверно проблемы. Ниже описанный код, сохраненный в vbs - не работает. Нажимаю, что-то вроде бы происходит, но в буфер ничего не копируется!?

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

'Копирование текста в буфер обмена
strCopy = "Этот текст будет скопирован в буфера обмена"
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")
objIE.document.parentWindow.clipboardData.setData "text", strCopy
objIE.Quit