Total Commander Knowledge Base

Есть вопрос?

Поищите ответ в самой большой русскоязычной базе знаний по Total Commander!

Преобразование FTP-имён в ссылки

Q: Столкнулся со следующей проблемой: при копировании в буфер имён файлов на FTP, ссылка имеет вид:

"ftp://212.212.212.212/Public/Video/Films (фильмы)/int/BMWfilms/1 - Ловушка.avi"

со всеми пробелами, русскими буквами и т.д., что, в принципе, не совсем верно. Хотелось бы получать ссылку в правильном виде, т.е:

ftp://212.212.212.212/Public/Video/Films%20(%F4%E8%EB%FC%EC%FB)/int/BMWfilms/1%20-%20%CB%EE%E2%F3%F8%EA%E0.avi

Такая ссылка хоть и менее наглядна, зато спокойно открывается любым браузером и любой качалкой.

A: Скрипт с использованием Script Helper:

'==========================================================================
' Преобразование текстовой ссылки в буфере -
' замена русских символов и пробелов на 16-теричный код этих символов
' с префиксом %
'==========================================================================
Dim TCS, Str, StrF, ChCode, Ch, i
Set TCS = CreateObject("TCScript.Helper")
Str = TCS.GetTextFromClip
For i = 1 To Len(Str)
Ch = Mid(Str, i, 1)
ChCode = Asc(Ch)
If (ChCode > 191) or (ChCode = 32) or (ChCode = 168) or (ChCode = 184) Then
StrF = StrF & "%" & Hex(ChCode)
Else
StrF = StrF & Ch
End If
Next
TCS.SetTextToClip(StrF)
Set TCS = Nothing
Wscript.Quit

Тот же скрипт, но с дополнительными возможностями:

'==========================================================================
' Преобразование текстовой ссылки в буфере -
' замена русских символов и пробелов на 16-тиричный код этих символов
' с префиксом %
' Можно предварительно выполнить копирование путей в буфер,
' указав в качестве параметра один из вариантов копирования:
' 0 - Копировать в буфер имена файлов
' 1 - Копировать в буфер имена с путями
' 2 - Копировать в буфер имена с UNC-путём
' 3 - Копировать в буфер путь источника
' 4 - Копировать в буфер путь получателя
'==========================================================================
Dim TCS, Str, StrF, ChCode, Ch, i
Set TCS = CreateObject("TCScript.Helper")
If WScript.Arguments.Count > 0 Then
Select Case WScript.Arguments(0)
Case 0 TCS.SendCommand(2017)
Case 1 TCS.SendCommand(2018)
Case 2 TCS.SendCommand(2021)
Case 3 TCS.SendCommand(2029)
Case 4 TCS.SendCommand(2030)
End Select
End If
Str = TCS.GetTextFromClip
For i = 1 To Len(Str)
Ch = Mid(Str, i, 1)
ChCode = Asc(Ch)
If (ChCode > 191) or (ChCode = 32) or (ChCode = 168) or (ChCode = 184) Then
StrF = StrF & "%" & Hex(ChCode)
Else
StrF = StrF & Ch
End If
Next
TCS.SetTextToClip(StrF)
Set TCS = Nothing
Wscript.Quit

Batya