Для имени файла к примеру Noname функция FSO.GetExtensionName(File) возвращает имя файла, а нам ведь надо тип! Поэтому я и сделал по-своему.Batya писал(а):Гораздо проще использовать метод GetExtensionName объекта FileSystemObject.
Windows Script Host
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
-
Victor_Dobrov
- Сообщения: 50
- Зарегистрирован: Вт июл 15, 2008 19:21
А проверить? Если у файла нет расширения этот метод возвращает пустую строку. Просто выполни вот такой VBS
и убедись в этом.
И потому вот такой блок в твоем скрипте будет вполне работоспособен:
Код: Выделить всё
MsgBox GetAnExtension("c:\noname")
Function GetAnExtension(DriveSpec)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
GetAnExtension = fso.GetExtensionName(Drivespec)
End FunctionИ потому вот такой блок в твоем скрипте будет вполне работоспособен:
Код: Выделить всё
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
Re: 3-ая редакция
Volniy писал(а):Почти то же самое, но только по-человечески![]()
Код: Выделить всё
'=========================[ Start of file ]========================= ' File: ReplaceInFiles.vbs ' Description: Производит поиск текста с заменой ' в выделенных текстовых файлах ' Installation: Создайте кнопку на панели TC ' Команда: "диск:\путь\к\файлу\ReplaceInFiles.vbs" ' Параметры: "%L" ' Copyright: (c) 2006-2008, Volniy ... Изменил немного код, чтобы файлы, в которых разыскиваемая строка [b]отсутствует[/b], не перезаписывались (действительно, нах оно?).[/quote] Возможно у меня все таки проблема с руками но ... в моем случае (*.ini - файлы .. найдены стандартным поиском с поиском текстовой строки.... находятся в разных подпапках одной папки.... ) кроме самой замены удаляет весь текст который находился в файлах с начала и до первой замены :cry:
Re: 3-ая редакция
На счет рук ничего не скажу, а вот с глазами у тебя порядокdjalexv писал(а):Возможно у меня все таки проблема с руками
А устраняется вот такой редакцией строки скрипта:
Код: Выделить всё
Buffer = Replace(CStr(Buffer), Find_String, Replace_String, 1, -1, 1)- aLexx
- Сообщения: 442
- Зарегистрирован: Пн мар 14, 2005 08:33
- Откуда: Новокузнецк
- Контактная информация:
Код: Выделить всё
' 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
дубликатов, одинаковых файлов. Но периодически, раз 5 из 100, скрипт не отрабатывает.
Пишет "Выделено "зеброй":): 0 файлов и каталогов.", хотя файлов море! Пришлось для обхода
этой ситуации ввести If...Else.
Выяснилось, что в этих случаях UBound(List) равен -1. Т.е., не отрабатывает строка
List = Split(... и т.д. А не отрабатывает потому, что не выполняется команда
"cm_CopyFullNamesToClip", т.е. буфер обмена пустой.
Может, это зависит от размера получаемого списка файлов? И "cm_CopyFullNamesToClip"
выполняется слишком долго? Или есть какой-то лимит на этот размер?
Иногда у меня этот список получается до 20 тыщ файлов! В тексте это более 3 метров.
Как это победить?
Volniy
Так как постоянно работаю с тоталом в висте, имею ряд ограничений связанных с неработоспособностью скриптов основанных на TCWSHelp.exe Вроде промелькало где то сообщение о баге, но про работоспособность не отписалось. Сделав свою сборку, навесив нужные кнопки раздал её пользователям XP и надеюсь када нить решить с вистой проблему.
Так как постоянно работаю с тоталом в висте, имею ряд ограничений связанных с неработоспособностью скриптов основанных на TCWSHelp.exe Вроде промелькало где то сообщение о баге, но про работоспособность не отписалось. Сделав свою сборку, навесив нужные кнопки раздал её пользователям XP и надеюсь када нить решить с вистой проблему.
Parcan писал(а):А можно ли в скрипте узнать не запущен ли он уже?
Чтобы если скрипт запустить 2 раза один выполнялся а второй чухал это и закрывался бы.
Код: Выделить всё
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
Нет, я не сплю. Я просто медленно моргаю.
