View previous topic :: View next topic |
Author |
Message |
Andrey_A
Joined: 10 Apr 2009 Posts: 394 Location: Сочи
|
(Separately) Posted: Tue Apr 27, 2010 13:47 Post subject: |
|
|
Вопрос разрешился как-то загадочно, я сам ничего не понял. Может кто-сталкивался. При установки 3-х систем Тотал оставался на месте, т.е. я его не устанавливаю, а просто копирую (в данном случае он просто был на диске с:\Total...) И во всех трёх системах происходила одна и та же ошибка. Я стал логически размышлять, а что общего между этими системами??? Прищёл к выводу - это, возможно оставшиеся файлы на диске с:\... Я посмотрел - какие-то непонятные 4 файла (Один из них, был толи tc.wc?, толи wc.tc? - откуда он взялся я не знаю). При их удалении всё заработало!!! Установки дополнительных библиотек, что только я не делал - ничего не помогало. А вот удаление - и всё OK. Как будто файл хранил какую-то информацию, блокирующую работу скрипта. |
|
Back to top |
|
|
Andrey_A
Joined: 10 Apr 2009 Posts: 394 Location: Сочи
|
(Separately) Posted: Sun May 09, 2010 16:25 Post subject: |
|
|
Пользуюсь скриптами с использованием Helperа - очень нравится. Недавно заметил, что скрипт, который постоянно работал, отказывался срабатывать. После долгих мучений понял что если путь или имя содержит определённые знаки, то ничего не просходит. Пример: если целевой каталог %COMMANDER_PATH%\+++\ , то команда TCS.SendKeystroke (Line) отказывается вписывать строку Line = TCS.GetTrgPath . Тестировал все имеющиеся скрипты, выяснилось и другое. Вот простой скрипт:
Code: | ' Создание папки в соседней панели с именем файла\папки под курсором
' Параметр "%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
Другие символы я не проверял, время не было... |
|
Back to top |
|
|
Volniy
Joined: 15 Dec 2004 Posts: 585 Location: Местный
|
(Separately) Posted: Sun May 09, 2010 22:09 Post subject: |
|
|
Quote: | Символы плюс (+), "крышка" (^), знак процентов (%), тильда (~) и круглые скобки ( ) имеют специальное значение. Чтобы указать передачу одного из этих символов, следует заключить его в фигурные скобки ({}). Например, знаку плюс соответствует код {+}... Фигурным скобкам соответствуют коды {{} и {}} |
Это фрагмент из прилагаемого к хелперу файла "SendKeystroke.txt". Это не я придумал, это копипаст из MS документации по VB-шному методу SendKeys, который и используется в хелпере (правда, с некоторыми несущественными дополнениями и переработками). Так что эту особенность тут как-то следует учитывать.
Что касается данного конкретного случая, то я бы предпочел вообще не использовать Тотал для создания новой папки. Для этого у WSH хватает и своих методов. Например, можно вот так:
Code: | 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
|
|
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Sun May 09, 2010 23:19 Post subject: |
|
|
Volniy wrote: | Что касается данного конкретного случая, то я бы предпочел вообще не использовать Тотал для создания новой папки. |
В данном случае можно обойтись без хелпера. Например, на VBS, можно так:
Code: | ' Создание папки в соседней панели с именем файла\папки под курсором
' Параметры: "%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 можно обойтись одной только кнопкой. Например так:
Code: | TOTALCMD#BAR#DATA
%ComSpec% /c md
"%T%O"
WCMICONS.DLL,29
Создание папки в соседней панели с именем файла\папки под курсором
1
-1
|
|
|
Back to top |
|
|
Andrey_A
Joined: 10 Apr 2009 Posts: 394 Location: Сочи
|
(Separately) Posted: Mon May 10, 2010 13:57 Post subject: |
|
|
Спасибо за советы, но речь шла не о конкретном скрипте, у меня десятка два скриптов, в которых используется путь или имя под курсором, и все они в папках(++, +++) не срабатывают. Есть три варианта
1. Исправить их и Helper не использовать
2. Подправить автором как-то программу, где при команде TCS.GetTrgPath или подобной пути, имена, имеющие спец знаки читались не посимвольно, а целой строкой
3. Сделать универсальный кусок скрипта, который бы проверял имя, путь на наличие в нём спец знаков и вставлял {} вокруг них, пример
путь c:\+++\ превращался бы в c:\{+}{+}{+}\, если кто может в этом помочь помогите пожалуйста, не хотелось отказываться от Helpera |
|
Back to top |
|
|
Volniy
Joined: 15 Dec 2004 Posts: 585 Location: Местный
|
(Separately) Posted: Fri May 14, 2010 02:36 Post subject: |
|
|
Andrey_A wrote: | 3. Сделать универсальный кусок скрипта, который бы проверял имя, путь на наличие в нём спец знаков и вставлял {} вокруг них, пример
путь c:\+++\ превращался бы в c:\{+}{+}{+}\, если кто может в этом помочь помогите пожалуйста, не хотелось отказываться от Helpera |
Code: | 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 И сдался вам этот хелпер... |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Aug 17, 2010 15:41 Post subject: |
|
|
Имеем WSH.ExpandEnvironmentStrings("%TEMP%")
Предположим, путь в переменной среды сопоставлен с C:\DOCUME~1\USERNAME\LOCALS~1\Temp.
Есть ли возможность перевести путь формата 8.3 в полный? |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Wed Aug 18, 2010 11:53 Post subject: |
|
|
Flasher wrote: | Есть ли возможность перевести путь формата 8.3 в полный? |
Примерно так:
Code: | FolderPath = "C:\DOCUME~1\Default\LOCALS~1\Temp"
MsgBox CreateObject("Shell.Application").NameSpace(FolderPath).Self.Path |
_________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Aug 18, 2010 12:43 Post subject: |
|
|
Batya
Благодарю, то, что надо! Code: | Set SA = CreateObject("Shell.Application")
TMP = WSH.ExpandEnvironmentStrings("%TEMP%")
Path = SA.NameSpace(TMP).Self.Path |
|
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Oct 01, 2010 03:59 Post subject: |
|
|
Ищу мягкий метод, который позволит менять местами выделенные файлы и папки в панелях с учётом совпадения некоторых по маске (без переименования), а также всё содержимое этих панелей. Пока безрезультатно. Кто-нибудь может подсказать, куда смотреть? |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Fri Oct 01, 2010 14:20 Post subject: |
|
|
Flasher
Если имена совпадают, думаю, что без переноса в промежуточный каталог или предварительного переименования не обойтись. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Oct 01, 2010 14:23 Post subject: |
|
|
Batya
Ну если тебе такие чудеса не известны, то придётся клепать с тем, что есть. Кстати, буду рад подключению, если времечко имеется. |
|
Back to top |
|
|
Andrey_A
Joined: 10 Apr 2009 Posts: 394 Location: Сочи
|
(Separately) Posted: Wed Oct 06, 2010 02:41 Post subject: |
|
|
В Helper есть функция SetTextToClip(Text) - отправить текст в буфер обмена. Есть ли возможность отправлять в буфер текст чем либо ещё в скриптовом формате? Дело в том, что при большом куске текста, эта функция не срабатывает. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Oct 06, 2010 04:39 Post subject: |
|
|
Если из файла, то объект FileSystemObject > объект TextStream > метод ReadAll
А тут описывается способ при наличии IE в системе. |
|
Back to top |
|
|
Andrey_A
Joined: 10 Apr 2009 Posts: 394 Location: Сочи
|
(Separately) Posted: Wed Oct 06, 2010 06:33 Post subject: |
|
|
с FileSystemObject > объект TextStream > метод ReadAll у меня проблем нет. Я это уже освоил, но вот с IE наверно проблемы. Ниже описанный код, сохраненный в vbs - не работает. Нажимаю, что-то вроде бы происходит, но в буфер ничего не копируется!?
Code: | 'Копирование текста в буфер обмена
strCopy = "Этот текст будет скопирован в буфера обмена"
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")
objIE.document.parentWindow.clipboardData.setData "text", strCopy
objIE.Quit |
|
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|