Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Windows Script Host
Goto page Previous  1, 2, 3 ... 8, 9, 10 ... 25, 26, 27  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Victor_Dobrov



Joined: 15 Jul 2008
Posts: 50

Post (Separately) Posted: Thu Jul 24, 2008 01:23    Post subject: Reply with quote

Batya wrote:
Гораздо проще использовать метод GetExtensionName объекта FileSystemObject.

Для имени файла к примеру Noname функция FSO.GetExtensionName(File) возвращает имя файла, а нам ведь надо тип! Поэтому я и сделал по-своему.
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Fri Jul 25, 2008 10:32    Post subject: Reply with quote

А проверить? Если у файла нет расширения этот метод возвращает пустую строку. Просто выполни вот такой VBS
Code:
MsgBox GetAnExtension("c:\noname")
Function GetAnExtension(DriveSpec)
   Dim fso
   Set fso = CreateObject("Scripting.FileSystemObject")
   GetAnExtension = fso.GetExtensionName(Drivespec)
End Function
и убедись в этом.

И потому вот такой блок в твоем скрипте будет вполне работоспособен:
Code:
If WScript.Arguments.Count > 0 Then    'запуск без параметров переключает последний фильтр
   sFilter = WScript.Arguments(0)
   Set FSO = CreateObject("Scripting.FileSystemObject")
   If FSO.FileExists(sFilter) Then sFilter = "*." & FSO.GetExtensionName(sFilter)
   TCS.INIWrite WScript.ScriptFullName, "sFilter", "sFilter", Chr(34) & sFilter & Chr(34)    'запомнить фильтр
End If
Back to top
View user's profile Send private message
djalexv



Joined: 28 Oct 2008
Posts: 2

Post (Separately) Posted: Tue Oct 28, 2008 21:07    Post subject: Re: 3-ая редакция Reply with quote

Volniy wrote:
Почти то же самое, но только по-человечески Wink
[code]'=========================[ Start of file ]=========================
' File: ReplaceInFiles.vbs
' Description: Производит поиск текста с заменой
' в выделенных текстовых файлах
' Installation: Создайте кнопку на панели TC
' Команда: "диск:\путь\к\файлу\ReplaceInFiles.vbs"
' Параметры: "%L"
' Copyright: (c) 2006-2008, Volniy
...
Изменил немного код, чтобы файлы, в которых разыскиваемая строка отсутствует, не перезаписывались (действительно, нах оно?).


Возможно у меня все таки проблема с руками но ... в моем случае (*.ini - файлы .. найдены стандартным поиском с поиском текстовой строки.... находятся в разных подпапках одной папки.... ) кроме самой замены удаляет весь текст который находился в файлах с начала и до первой замены Crying or Very sad
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Thu Oct 30, 2008 01:52    Post subject: Re: 3-ая редакция Reply with quote

djalexv wrote:
Возможно у меня все таки проблема с руками


На счет рук ничего не скажу, а вот с глазами у тебя порядок Wink . Подтверждаю баг (вкрапление в код, результат какого-то моего эсперимента). Извиняюсь, если что ценное покалечил Embarassed
А устраняется вот такой редакцией строки скрипта:

Code:
Buffer = Replace(CStr(Buffer), Find_String, Replace_String, 1, -1, 1)

Эти изменения я внес и в исходное сообщение со скриптом.
Back to top
View user's profile Send private message
djalexv



Joined: 28 Oct 2008
Posts: 2

Post (Separately) Posted: Thu Oct 30, 2008 12:03    Post subject: Reply with quote

Благодарю Very Happy
Back to top
View user's profile Send private message
aLexx



Joined: 14 Mar 2005
Posts: 442
Location: Новокузнецк

Post (Separately) Posted: Thu Nov 27, 2008 14:41    Post subject: Reply with quote

Code:
' File:         ZebraMark-2.vbs
' Description:  Помечает все файлы и каталоги через один.
' Requirements: WSH Helper for TC by Volniy
' Copyright:    (c) 2007, Volniy, aLexx

Option Explicit
Dim List, TCS, Cnt, Buf
Set TCS = CreateObject("TCScript.Helper")

TCS.SendCommand ("cm_SelectAll")  'Выбрать всё
TCS.SendCommand ("cm_CopyFullNamesToClip")  'Копируем в буфер
List = Split(TCS.GetTextFromClip,vbNewLine) ' Получаем массив имен
If UBound(List) > 2 Then
  For Cnt=0 To UBound(List)
    If Cnt Mod 2 = 1 Then
     Buf = Buf & List(Cnt) & vbNewLine
    End If
  Next
  TCS.SetTextToClip CStr(Buf)
  TCS.SendCommand "cm_LoadSelectionFromClip", True
  MsgBox "Выделено ""зеброй"":): " & Cnt \ 2 & " файлов и каталогов.", vbInformation, "Завершено!"
Else
  TCS.SendCommand ("cm_ClearAll")  'Снять выделение
End If

Set TCS = Nothing
Set List = Nothing
Set Cnt = Nothing
Set Buf = Nothing
WScript.Quit


Очень активно используемый мной скрипт. Чуть переделанный скрипт от Volniy. Для удаления
дубликатов, одинаковых файлов. Но периодически, раз 5 из 100, скрипт не отрабатывает.
Пишет "Выделено "зеброй"Smile: 0 файлов и каталогов.", хотя файлов море! Пришлось для обхода
этой ситуации ввести If...Else.
Выяснилось, что в этих случаях UBound(List) равен -1. Т.е., не отрабатывает строка
List = Split(... и т.д. А не отрабатывает потому, что не выполняется команда
"cm_CopyFullNamesToClip", т.е. буфер обмена пустой.
Может, это зависит от размера получаемого списка файлов? И "cm_CopyFullNamesToClip"
выполняется слишком долго? Или есть какой-то лимит на этот размер?
Иногда у меня этот список получается до 20 тыщ файлов! В тексте это более 3 метров.
Как это победить?
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Thu Nov 27, 2008 18:24    Post subject: Reply with quote

aLexx wrote:
Как это победить?

Можно получать список файлов не через буфер, а пердавать через параметр %L.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
aLexx



Joined: 14 Mar 2005
Posts: 442
Location: Новокузнецк

Post (Separately) Posted: Thu Nov 27, 2008 18:38    Post subject: Reply with quote

Я про это думал... Но не придумал, как!
Опыта маловато...
Back to top
View user's profile Send private message
Riemann



Joined: 24 Sep 2008
Posts: 23

Post (Separately) Posted: Sat Jan 31, 2009 16:14    Post subject: Reply with quote

Volniy
Так как постоянно работаю с тоталом в висте, имею ряд ограничений связанных с неработоспособностью скриптов основанных на TCWSHelp.exe Вроде промелькало где то сообщение о баге, но про работоспособность не отписалось. Сделав свою сборку, навесив нужные кнопки раздал её пользователям XP и надеюсь када нить решить с вистой проблему.
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Sat Jan 31, 2009 21:00    Post subject: Reply with quote

А по-конкретней нельзя ли? Что за "ряд ограничений"? Может просто влом vb5 рантаймы поставить? Могу на VB6 перекомпилировать (если исходник найду, конечно).
Back to top
View user's profile Send private message
Riemann



Joined: 24 Sep 2008
Posts: 23

Post (Separately) Posted: Thu Feb 05, 2009 00:56    Post subject: Reply with quote

Вот конкретнее


Предполагаю, что на винде 7-ке аналогичная проблема.
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Thu Feb 05, 2009 02:39    Post subject: Reply with quote

А регистрация хелпера проходит без ошибок? Я имею ввиду запуск экзешника TCWSHelp.exe.
Back to top
View user's profile Send private message
Riemann



Joined: 24 Sep 2008
Posts: 23

Post (Separately) Posted: Thu Feb 05, 2009 11:34    Post subject: Reply with quote

Регистрация проходит без ошибок, внесение без проблем. А эффекта нет.
Back to top
View user's profile Send private message
Parcan



Joined: 15 Dec 2004
Posts: 398
Location: Russian

Post (Separately) Posted: Tue May 12, 2009 17:20    Post subject: Reply with quote

А можно ли в скрипте узнать не запущен ли он уже?
Чтобы если скрипт запустить 2 раза один выполнялся а второй чухал это и закрывался бы.
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Wed May 13, 2009 17:20    Post subject: Reply with quote

Parcan wrote:
А можно ли в скрипте узнать не запущен ли он уже?
Чтобы если скрипт запустить 2 раза один выполнялся а второй чухал это и закрывался бы.

Code:
Option Explicit
Dim WMI, ComLine, oProc, oP, Btn, i, ProcCount

On Error Resume Next
'Объявляем объект WMI
Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
If Err.Number <> 0 Then
  MsgBox Err.Number & ": " & Err.Description
  WScript.Quit
End If
'В командной строке должно быть по 2 слэша, например, C:\\Путь\\до\\файла\\Файл.Расширение
ComLine   = Replace(WScript.ScriptFullName, "\", "\\")
'Ищем в списке процессов по командной строке, не запущен ли уже данный скрипт
Set oProc = WMI.ExecQuery("SELECT * from Win32_Process " &_
            "WHERE CommandLine Like '%wscript%" & ComLine & "%'")
ProcCount = oProc.Count
'Если процессов более одного (с учетом текущего запуска)
If ProcCount > 1 Then
  'Выдаем предупреждение с предложением завершить работу старого скрипта
  Btn = MsgBox("Обнаружен ранее запущенный аналогичный скрипт." &_
        vbNewLine & "Старый процесс будет замещен новым."       &_
        vbNewLine, _
        vbOKCancel + vbQuestion, "Перезапуск скрипта")
  'Если отвечаем "OK"
  If Btn = vbOK Then
    i = 0
    'Убиваем все аналогичные процессы, кроме текущего (он последний)
    For Each oP In oProc
      i = i + 1
      If i = ProcCount Then
        Exit For
      End If
      oP.Delete_
    Next
  Else
    Set oProc = Nothing
    Set WMI   = Nothing
    WScript.Quit
  End If
End If
On Error Goto 0

_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... 8, 9, 10 ... 25, 26, 27  Next
Page 9 of 27

 
Jump to:  
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