Страница 21 из 42

Добавлено: Пт июл 22, 2011 17:11
Flasher
shveicar
Смена фокуса или переход вообще нигде не нужны? Тогда три строки нижние следует отправить в небытие.

Добавлено: Пт июл 22, 2011 19:18
shveicar
Спасибо за подсказку, теперь все "ок"

Добавлено спустя 1 час 43 минуты:

Вот только сейчас обнаружил, что скрипт работает исправно, только в пределах одного диска, а если в панелях открыты разные диски то вылетает ошибка

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

Windows Script Host
Строка:	13
Символ:	7
Ошибка:	Разрешение отклонено
Код:	800A0046
что можно с этим сделать?

Добавлено: Пт июл 22, 2011 19:29
Flasher
Не знаю насчёт разных дисков, но одну вещь я упустил.
Нужно в скрипте массово удалить то, что в скобках: ( & "\").

Добавлено: Пт июл 22, 2011 19:45
shveicar
Сделал, но опять - работает только в пределах одного диска. :roll: и выскакивает та-же ошибка.

Добавлено: Пт июл 22, 2011 20:02
Flasher
Да, что-то на папки ругается. Файлы перемещает. Замени

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

      .MoveFolder F, TargetPath
на

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

      F.Copy TargetPath & .GetFolder(N).Name
      F.Delete

Добавлено: Пт июл 22, 2011 20:55
shveicar
Ура! Заработало. :)

Добавлено: Ср авг 17, 2011 01:11
Flasher

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

' Выделение  в панелях одноимённых, но разноразмерных файлов и папок
' Необходима регистрация Script Helper ActiveX for TC
' Параметр: "%P" "%T"
'==================================================
With CreateObject("Scripting.FileSystemObject")
  Set P = .GetFolder(WScript.Arguments(0))
  Set T = .GetFolder(WScript.Arguments(1))
End With
Set D = CreateObject("Scripting.Dictionary")
Set G = CreateObject("Scripting.Dictionary")

For Each F in P.SubFolders
  D.Add F.Name, F.Size
Next
For Each F in T.SubFolders
  G.Add F.Name, F.Size
Next
For Each F in D.Keys
  If G.Exists(F) And D(F) <> G(F) Then S = S & vbnewline & F & "\"
Next
D.RemoveAll
G.RemoveAll

For Each F in P.Files
  D.Add F.Name, F.Size
Next
For Each F in T.Files
  G.Add F.Name, F.Size
Next
For Each F in D.Keys
  If G.Exists(F) And D(F) <> G(F) Then S = S & vbnewline & F
Next

With CreateObject("TCScript.Helper")
  T = .GetTextFromClip
  .SetTextToClip(S)
  .LockTC True
  .SendCommand 4001
  .SendCommand 2033
  .SendCommand 4002
  .SendCommand 2033
  .LockTC False
  .SetTextToClip(T)
End With

Wscript.Quit

Добавлено: Ср авг 17, 2011 19:10
Flasher

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

' Отправить в буфер RGB-число

Do Until Main
Loop

Function Main
  Main = False
  L = vbNewLine
  A = InputBox(L&"      Введите через пробел три числа (0-255),"&_
  "            соответствующие своему цвету "& L & "      ""красный зелёный синий""",_
  "                          Конвертация в RGB-число","0 0 0")
If A = vbNullString Then WScript.Quit

  For i = 1 to Len(A)
    N = Mid(A,i,1)
    If N = " " Then Sp = Sp & N
  Next
  If Len(Sp) <> 2 Then
    MsgBox "Необходимо указать 3 числа с 2-мя пробелами !", vbExclamation,_
    "                            Конвертация в RGB-число"
    Exit Function
  End If

  R = Left(A, Instr(A," ")-1)
  C = Mid(A,Len(R)+2)
  G = Left(C, Instr(C," ")-1)
  B = Mid(A, InstrRev(A," ")+1)

  For Each E in Array(R,G,B)
    If IsNumeric(E)=False Then
      MsgBox "Все значения должны быть числовыми !", vbExclamation,_
      "                     Конвертация в RGB-число"
      Exit Function
    End if
    If E<0 Or E>255 Then
      MsgBox "Все числа должны лежать в диапазоне [0-255] !", vbExclamation,_
      "                             Конвертация в RGB-число"
      Exit Function
    End If
  Next
  Main = True

  Dim WSH
  Set WSH = CreateObject("WScript.Shell")
  P = "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\1407"
  A = WSH.RegRead(P)
  If A > 0 Then WSH.RegWrite P, 0, "REG_DWORD"
  With CreateObject("InternetExplorer.Application")
    .Navigate("about:blank")
    .document.parentWindow.clipboardData.setData "text", Trim(RGB(R, G, B))
    .Quit
  End With
  If A > 0 Then WSH.RegWrite P, A, "REG_DWORD"
  Set WSH = Nothing

  WScript.Quit
End Function

Добавлено: Пт авг 19, 2011 10:26
Batya
Flasher писал(а):' Отправить в буфер RGB-число
У меня IE при каждом запуске требует разрешения на на доступ к буферу обмена. Менять настройки не хочу. Переделал скрипт от Flasher с выводом результата в окне. Кому надо (например, мне :) ), самостоятельно нажмёт Ctrl+C.

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

'=====================================================================
' Вычисление RGB-числа
'=====================================================================
Option Explicit
Dim R, G, B, A, Flag, MM
Const Title = "Вычисление RGB-числа"

On Error Resume Next
Do
  A = InputBox("Введите через пробел три числа [0-255]," & vbnewLine & _
               "соответствующие своему цвету "           & vbNewLine & _
               """красный зелёный синий""", Title, "0 0 0")
  If A = "" Then WScript.Quit

  With New RegExp
    .Pattern    = "^ *(\d+) +(\d+) +(\d+) *$"
    .IgnoreCase = True
    .Global     = True
    Set MM      = .Execute(A)(0).SubMatches
  End With
  Flag = (Err.Number = 0)
  If Flag Then
    R = MM(0) : G = MM(1) : B = MM(2)
    Flag = (R <= 255 And G <= 255 And B <= 255)
    If Not Flag Then Mess 2
  Else
    Mess 1
    Err.Clear
  End If
Loop Until Flag
On Error GoTo 0

InputBox "Результат:", Title, RGB(R, G, B)
WScript.Quit

Sub Mess(Mode)
  Dim lStr
  Select Case Mode
    Case 1 lStr = "Необходимо указать 3 числа, разделённых пробелами!"
    Case 2 lStr = "Все числа должны лежать в диапазоне [0-255]!"
  End Select
  MsgBox lStr, vbExclamation, Title
End Sub

Добавлено: Пт авг 19, 2011 15:16
Flasher
Batya писал(а):требует разрешения на на доступ к буферу обмена. Менять настройки не хочу.
А у других требует объект Helper (где он задействован), причём гораздо чаще. А причина нехотения в чём?
Собственно, исправил скрипт персонально под твоё "не хочу". :wink:
Batya писал(а):Переделал скрипт от Flasher с выводом результата в окне.
У меня сперва тоже было окно, но оно только мешало. Короче не резон этим пользоваться, см. сюда. Нижние три программы имеют кнопку копирования значения в буфер.

Добавлено: Чт авг 25, 2011 20:15
dude
Достаточно специфический реквест скрипта. Думаю, лучше и проще прямо описать в действиях желаемое от него:
Имеется несколько ZIP-архивов с упакованными PNG-файлами, размещенными в различных каталогах в каждом из архивов.
Что хотелось бы?:
1. Скрипт распаковывает (желательно с помощью 7-ZIP) каждый из выделенных архивов во временную директорию ( в свою для каждого — это очевидно).
2. Рекурсивно для всех каталогов данного архива переименовывает, точнее — заменяет в именах файлов предопределенный набор символов другими (например, символы скобок, дефисов, копирайтов, процентов и пр. на пробел или нижнее подчеркивание).
3. Затем создает тут же в корневой директории каталог с именем 128х128.
4. Все найденные переименованные PNG копируются из соседних директорий в этот каталог, соответственно скрипт меняет (ясно, с помощью внешнего приложения, идеально бы — XNView) размер копируемых PNG на 128х128 пикс. Все совпадения в именах (а они будут) решаются выбором файла с наибольшим весом, остальные пропускаются.
5. Далее все подкаталоги с новым 128х128 и переименованными файлами перемещаются с заменой в исходный ZIP-архив, и сохранение архива.

* выбор архиватора и конвертера не критичен и может быть любым иным
** сразу скажу, что данный реквест не сиюминутная блажь. Все вышеописанные манипуляции — единственная безыдейная и механическая часть моей ежедневной деятельности и отнимающая чудовищное количество времени у куда более важных рабочих задач. И было бы очень мягким выражением сказать, что данный скрипт невероятно облегчил бы жизнь. Даже так, да)
*** понимаю, что конструкция выглядит сложно, но, надеюсь, будут варианты если не полного выполнения скриптом описанных задач, то хоть частично.

upd. ок, решилось почти все nncron'ом с привязкой пары утилит
но реализация скриптом через тотал было бы идеальным вариантом

Как рассортировать по авторам (в папки) много файлов

Добавлено: Пн окт 31, 2011 16:15
panalex
Добрый, наверное, день, господа.
Возникла у меня такая ситуация - есть много файлов с самиздата вида *.shtml в одной папке. Хочу раскидать их по папкам с именами авторов, которые есть в 10-й строке кода до двоеточия

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

<html>
<head>
<!-- text/html; charset=windows-1251 from header (HC) -->

	<title>Хван Дмитрий Иванович. Обновление. Глава 7</title>
</head>

<body bgcolor="#E9E9E9">
<div align=right><h3>
Хван Дмитрий Иванович: <small><a href=/h/hwan_d_i/>другие произведения.</a></small>
</h3></div>
Возможно ли это сделать с помощью скрипта и как. Я не программист совершенно, поэтому и обращаюсь за помощью.

Добавлено: Пн окт 31, 2011 17:00
Flasher
panalex
На какой глубине располагаются эти файлы, и где должны быть папки-получатели?

Названия можно было и не выносить в отдельную строку, это не принципиально при написании скрипта.

Добавлено: Пн окт 31, 2011 17:57
panalex
Flasher
Все файлы лежат в одной папке. Создавать папки с именем автора здесь же и перемещать туда файл. Файлов одного автора может быть несколько. Они должны попасть в одну папку.
В имени автора может быть от 1 до 4 слов, но заканчивается оно двоеточием, начинается с начала строки.

Добавлено: Пн окт 31, 2011 19:00
Flasher
По-простому, без изысков:

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

' Перемещение выделенных файлов в создаваемые рядом папки
' с именами начал 10-х строк этих файлов до двоеточия
' Параметр: %L
'========================================================
With CreateObject("Scripting.FileSystemObject")
  Set TF = .OpenTextFile(WScript.Arguments(0), 1)
  Do While Not TF.AtEndOfStream
    F = TF.ReadLine
    If F > vbNullString And .FileExists(F) Then
      FF = LTrim(Split(.OpenTextFile(F,,,-2).ReadAll, vbNewLine)(9))
      Trg = .GetParentFolderName(F) & "\" & Left(FF, InStr(FF, ":") - 1)
      If Not .FolderExists(Trg) Then .CreateFolder Trg
      .MoveFile F, Trg & "\"
    End If
  Loop
  TF.Close
End With
Файлы должны быть сохранены в ANSI или UTF-16.