Написал небольшой wsh-скрипт, который меняет последовательность ссылок в файле, так чтобы одинаковые серверы не стояли подряд. Т.е. ссылки
http://ifolder.ru/1 http://ifolder.ru/2 http://ifolder.ru/3 http://rapidshare.com/01 http://rapidshare.com/02 http://rapidshare.com/03 заменяются на
http://ifolder.ru/1 http://rapidshare.com/01 http://ifolder.ru/3 http://rapidshare.com/02 http://ifolder.ru/2 http://rapidshare.com/03 Соответственно, меньше проблем с временем ожидания.
[more=Использование скрипта]
1. Копируем программный текст в файл с расширением wsh (например sort.wsh)
2. Выделяем список ссылок в USD (Ctrl-A)
3. Копируем в буфер обмена (Ctrl-C)
4. Вставляем в текстовый файл (например link.txt).
5. Запускаем скрипт: sort.wsh link.txt
6. Открываем файл link.txt с измененной последовательностью ссылок.
7. Вставляем новый список в USD
Минус: поскольку копируется только список ссылок - описания ссылок сохранены не будут.
Код: <?xml version="1.0" ?>
<package>
<!-- version 1.0 081022 -->
<job id="SortUSD" prompt="no">
<?job error="false" debug="false" ?>
<runtime>
<description>
(c) KAO akrutskikh@hotmail.ru
version 1.0 - 081022
</description>
<unnamed helpstring="file with list of links" name="FILENAME" required="true" many="false"/>
</runtime>
<script id="vb01" language="VBScript">
<![CDATA[
Function GetID(link)
GetID = RegExpAddr(trim(link))
End Function
Function FindOth(arrFileLines, startLine, cID)
For m = startLine to UBound(arrFileLines,2) Step 1
nID = arrFileLines(1,m)
if cID <> nID then
FindOth = m
Exit Function
end if
Next
FindOth = -1
End Function
Function RegExpAddr(strng)
Dim regEx, Match, Matches, patrn ' Create variable.
On Error Resume Next
patrn = "^(?:(?:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\.)*([a-z0-9-]{1,128})\.+(?:com|net|org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0)((?:(?!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3}))(?:/).*?"
Set regEx = New RegExp ' Create a regular expression.
regEx.Pattern = patrn ' Set pattern.
regEx.IgnoreCase = True ' Set case insensitivity.
regEx.Global = True ' Set global applicability.
Set Matches = regEx.Execute(strng) ' Execute search.
Set Match = Matches(0)
RetStr = Match.SubMatches(0) & Match.SubMatches(1)
RegExpAddr = RetStr
End Function
]]>
</script>
<script id="StartSection" language="VBScript">
<![CDATA[
if(WScript.Arguments.Unnamed.length=0) then
WScript.Arguments.ShowUsage()
WScript.Quit()
end if
ReDim arrFileLines(1,0)
i = 0
fn = WScript.Arguments.Unnamed(0)
fo = fn & ".cpy"
Set objFSO = CreateObject("Scripting.FileSystemObject")
if objFSO.FileExists(fo) then
objFSO.DeleteFile fo, true
end if
objFSO.MoveFile fn, fo
Set objFile = objFSO.OpenTextFile(fo, 1, False, TristateUseDefault)
Do Until objFile.AtEndOfStream
Redim Preserve arrFileLines(1,i)
ln = objFile.ReadLine
arrFileLines(0,i) = ln
arrFileLines(1,i) = GetID(ln)
'Wscript.Echo " !!! " & arrFileLines(0,i)
i = i + 1
Loop
objFile.Close
Set objFile = objFSO.OpenTextFile(fn, 2,True,TristateUseDefault)
objFile.WriteLine arrFileLines(0,LBound(arrFileLines,2))
ID = arrFileLines(1,LBound(arrFileLines,2))
For l = LBound(arrFileLines,2)+1 to UBound(arrFileLines,2) Step 1
nl = FindOth(arrFileLines, l, ID)
if nl>=0 and nl<>l then ' trim string
t = arrFileLines(0,l)
arrFileLines(0,l) = arrFileLines(0,nl)
arrFileLines(0,nl) = t
t = arrFileLines(1,l)
arrFileLines(1,l) = arrFileLines(1,nl)
arrFileLines(1,nl) = t
end if
ID = arrFileLines(1,l)
objFile.WriteLine arrFileLines(0,l)
Next
objFile.Close
'MsgBox(RegExpAddr("rapidshare.com/"))
WScript.Quit()
]]>
</script>
</job>
</package>