Windows Script Host
Select messages from
# through # FAQ
[/[Print]\]
Goto page Previous  1, 2, 3 ... 8, 9, 10 ... 25, 26, 27  Next  :| |:
Total Commander -> Автоматизация Total Commander

#121:  Author: Victor_Dobrov PostPosted: Thu Jul 24, 2008 01:23
    —
Batya wrote:
Гораздо проще использовать метод GetExtensionName объекта FileSystemObject.

Для имени файла к примеру Noname функция FSO.GetExtensionName(File) возвращает имя файла, а нам ведь надо тип! Поэтому я и сделал по-своему.

#122:  Author: VolniyLocation: Местный PostPosted: Fri Jul 25, 2008 10:32
    —
А проверить? Если у файла нет расширения этот метод возвращает пустую строку. Просто выполни вот такой 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

#123: Re: 3-ая редакция Author: djalexv PostPosted: Tue Oct 28, 2008 21:07
    —
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

#124: Re: 3-ая редакция Author: VolniyLocation: Местный PostPosted: Thu Oct 30, 2008 01:52
    —
djalexv wrote:
Возможно у меня все таки проблема с руками


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

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

Эти изменения я внес и в исходное сообщение со скриптом.

#125:  Author: djalexv PostPosted: Thu Oct 30, 2008 12:03
    —
Благодарю Very Happy

#126:  Author: aLexxLocation: Новокузнецк PostPosted: Thu Nov 27, 2008 14:41
    —
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 метров.
Как это победить?

#127:  Author: BatyaLocation: Москва, Россия PostPosted: Thu Nov 27, 2008 18:24
    —
aLexx wrote:
Как это победить?

Можно получать список файлов не через буфер, а пердавать через параметр %L.

#128:  Author: aLexxLocation: Новокузнецк PostPosted: Thu Nov 27, 2008 18:38
    —
Я про это думал... Но не придумал, как!
Опыта маловато...

#129:  Author: Riemann PostPosted: Sat Jan 31, 2009 16:14
    —
Volniy
Так как постоянно работаю с тоталом в висте, имею ряд ограничений связанных с неработоспособностью скриптов основанных на TCWSHelp.exe Вроде промелькало где то сообщение о баге, но про работоспособность не отписалось. Сделав свою сборку, навесив нужные кнопки раздал её пользователям XP и надеюсь када нить решить с вистой проблему.

#130:  Author: VolniyLocation: Местный PostPosted: Sat Jan 31, 2009 21:00
    —
А по-конкретней нельзя ли? Что за "ряд ограничений"? Может просто влом vb5 рантаймы поставить? Могу на VB6 перекомпилировать (если исходник найду, конечно).

#131:  Author: Riemann PostPosted: Thu Feb 05, 2009 00:56
    —
Вот конкретнее


Предполагаю, что на винде 7-ке аналогичная проблема.

#132:  Author: VolniyLocation: Местный PostPosted: Thu Feb 05, 2009 02:39
    —
А регистрация хелпера проходит без ошибок? Я имею ввиду запуск экзешника TCWSHelp.exe.

#133:  Author: Riemann PostPosted: Thu Feb 05, 2009 11:34
    —
Регистрация проходит без ошибок, внесение без проблем. А эффекта нет.

#134:  Author: ParcanLocation: Russian PostPosted: Tue May 12, 2009 17:20
    —
А можно ли в скрипте узнать не запущен ли он уже?
Чтобы если скрипт запустить 2 раза один выполнялся а второй чухал это и закрывался бы.

#135:  Author: BatyaLocation: Москва, Россия PostPosted: Wed May 13, 2009 17:20
    —
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



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page Previous  1, 2, 3 ... 8, 9, 10 ... 25, 26, 27  Next  :| |:
Page 9 of 27

Powered by phpBB © 2001, 2005 phpBB Group