Русское сообщество AutoIt

  • Май 20, 2012, 11:54:06 *
  • Добро пожаловать, Гость
Пожалуйста, войдите или зарегистрируйтесь.

Войти
Расширенный поиск  

Новости:

На форуме было сделано несколько небольших изменений...

1) Расширено поле поиска, теперь можно выбрать, искать в текущей теме, текущем разделе, по всему форуму, или с помощью Google.

2) Новым участникам форума (до 20-ти сообщении) над формой создания новой темы отображается информационный блок с некоторыми правилами и рекомендациями по созданию новой темы.

17.07.2010

Реклама

Автор Тема: [Файловая система] Сменить кодировку имени файла  (Прочитано 2370 раз)

0 Пользователей и 1 Гость смотрят эту тему.

Redline [?]

  • AutoIt Гуру
  • *****
  • Репутация: 278
  • Online Online
  • Пол: Мужской
  • Сообщений: 425
  • Версия AutoIt: 3.3.6.1
    • Награды
С помощью Dr.Web Live CD перенес файлы с упавшей Windows на рабочий комп. Все русские буквы в названиях файлах превратились в фарш  :wacko: - даже в SciTE эти названия вставляются не так, как отображены в проводнике. Перелопатил Encoding UTF - безрезультатно. Помог Штирлиц (программа для перекодировки файлов и текстов) - сразу перекодировал как надо - кодировка UTF-8, но переименовывать гору файлов и папок по одному это не выход. Помогите с решением проблемы!
Вот название пары файлов из проводника и их перевод:
Инструкция по установке.htm
НОВЫЕ графики 08-09днев.xls
Инструкция по установке.htm
НОВЫЕ графики 08-09днев.xls
И пробный скрипт:
Код: AutoIt [Выделить]
#include <encoding.au3>
$search = FileFindFirstFile("*.htm")

If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
EndIf

While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $a = _Encoding_UTF8ToANSI(FileGetLongName($file))
    MsgBox(0, '', $a)
    MsgBox(4096, "File:", $file)
WEnd

; Close the search handle
FileClose($search)
 

Нашел обходное решение - включаем в Штирлице слежение за буфером обмена - и через него гоняем имена файлов массивами  :laugh:
Код: AutoIt [Выделить]
#include <array.au3>

$search = FileFindFirstFile("*.*")

Dim $arr[10], $arr2[10]

If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
EndIf
$nomer = 0
While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $arr[$nomer] = FileGetLongName($file)
        $nomer += 1
WEnd
ClipPut(_ArrayToString($arr))
Sleep(2000)
$arr2 = StringSplit(ClipGet(), '|', 2)

For $i = 0 To UBound($arr) - 1
    FileMove($arr[$i], $arr2[$i])
Next

FileClose($search)

Но решение на чистом AutoIT все еще ищется.
« Последнее редактирование: Май 14, 2010, 10:13:06 от Redline »



  Записан
Приму в дар инвайт на dirty

dwerf [?]

  • AutoIt Гуру
  • *****
  • Репутация: 189
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 455
  • Версия AutoIt: 3.3.6.1
  • Использует ArchLinux
    • Награды
А чем пробный скрипт то не устраивает? А то у меня encoding.au3 нет.

А вообще я бы как то так делал:




  Записан
00110110001000001101000011010011001

Redline [?]

  • AutoIt Гуру
  • *****

  • Автор темы
  • Репутация: 278
  • Online Online
  • Пол: Мужской
  • Сообщений: 425
  • Версия AutoIt: 3.3.6.1
    • Награды
dwerf  [?]
Цитата
А вообще я бы как то так делал:
Супер!  :laugh:
Вот encoding UDF, если интересно. Encoding UDF - Библиотека для работы с кодировками строк

Скрипт переписал - чтобы мог менять имена папок, а также ходил по всем папкам и подпапкам, находящимся на одном уровне вложения со скриптом.
Код: AutoIt [Выделить]
#include <File.au3>
#include <Array.au3>

Global $aDir[1], $file1 = '', $file2 = '', $left = '', $right = ''

_ArrayAddFileListSubDir($aDir, @ScriptDir)

For $i = UBound($aDir) - 1 To 1 Step -1 ; обход из конца массива в начало - начиная с более глубоких папок, чтобы не ломать структуры массива
    $file1 = $aDir[$i]
    If $file1 = @ScriptFullPath Then ContinueLoop ; пропустить если обрабатываемый файл является скриптом
    $left = StringRegExpReplace($file1, '\\[^\\]*$', '') ; путь без имени файла или последней папки
    $right = StringFromASCIIArray(StringToASCIIArray(StringRegExpReplace($file1, '^.*\\', ''), 0, Default, 0), 0, Default, 2) ; имя файла или последней папки
    $file2 = $left & '\' & $right
    If $file1 = $file2 Then ContinueLoop ; если смена кодировки не принесла изменений - пропускаем
    If MsgBox(36, 'Renamer', 'Rename?' & @CRLF & @CRLF & $file1 & @CRLF & $file2) = 6 Then ; диалог переименования
        If StringInStr(FileGetAttrib($file1), 'D') Then ; если файл - это папка
            DirMove($file1, $file2)
        Else ; просто файл
            FileMove($file1, $file2)
        EndIf
    EndIf
Next
; построение файл-листа для папки - автор Amel27
Func _ArrayAddFileListSubDir(ByRef $aGDir, $sPath)
    Local $i = UBound($aGDir), $aLDir = _FileListToArray($sPath, '*')
    _ArrayAddFileList($aGDir, $sPath)
    While $i < UBound($aGDir)
        _ArrayAddFileList($aGDir, $aGDir[$i])
        $i += 1
    WEnd
EndFunc

Func _ArrayAddFileList(ByRef $aGDir, $sPath)
    Local $i, $aLDir = _FileListToArray($sPath, '*')
    If UBound($aGDir, 0) = 1 And UBound($aLDir, 0) = 1 Then
        For $i = 1 To $aLDir[0]
            _ArrayAdd($aGDir, $sPath & '\' & $aLDir[$i])
        Next
    EndIf
EndFunc
 




  Записан
 


Похожие темы
Тема Автор Ответов Просмотров Последний ответ
[Файловая система] Переименование файла по шаблону
AutoIt для новичков
general66 14 1389 Последний ответ Май 02, 2011, 13:57:30
от general66
[Файловая система] Проверка на наличие строки, перемещение файла содержащего её
Стол заказов
SVD 14 1627 Последний ответ Май 16, 2011, 17:48:55
от Garrett
[Файловая система] Получение имени папки в определенном каталоге по маске.
AutoIt для новичков
firex 16 1076 Последний ответ Июль 20, 2011, 00:15:12
от firex
[Файловая система] Как записать байты в середину файла с помощью FileSetPos?
AutoIt для новичков
ohos 3 431 Последний ответ Сентябрь 05, 2011, 22:52:57
от Kaster
[Файловая система] Запуск файла с расширением .mac
AutoIt для новичков
alexnasnet 12 726 Последний ответ Ноябрь 07, 2011, 22:25:39
от Zaramot
[Файловая система] Копирование файла при запуске
Стол заказов
trudovik 7 637 Последний ответ Январь 10, 2012, 16:50:34
от Medic84
[Файловая система] Пробел в начале названия файла
Стол заказов
Rjevsky 17 1004 Последний ответ Январь 28, 2012, 22:49:50
от madmasles
[Файловая система] получение имени файла для создания папки
AutoIt для новичков
Tosyk 2 255 Последний ответ Февраль 10, 2012, 18:13:00
от madmasles
[Файловая система] Создание файла и отправка его по e-mail
Стол заказов
Kabanana1 2 241 Последний ответ Февраль 13, 2012, 15:17:13
от Александр
[Файловая система] Поиск файла и замена в нем текста
AutoIt для новичков
vanekzver 14 678 Последний ответ Февраль 24, 2012, 14:16:31
от Kaster


Реклама

* Последние сообщения на форуме
post Проблема с циклами While
[AutoIt для новичков] Andeangl Сегодня в 11:03:15
post Уроки программирования и автоматизации посредством AutoIt для чайников
[AutoIt для новичков] aak Сегодня в 09:41:45
post Re: Как спарсить ссылку внутри тега "td" определенного класса
[Регулярные выражения и прочее] eropov Сегодня в 05:27:00
post Re: Ограничение доступа(блокировка) к компьютеру если не вставлен носитель с ключом
[AutoIt для новичков] Pat4005 Сегодня в 01:02:55
post Re: Развитие русской справки
[Инструменты и помощь по AutoIt] CreatoR Сегодня в 00:02:03
post Re: Развитие русской справки
[Инструменты и помощь по AutoIt] CreatoR Май 19, 2012, 23:55:37
post Узнать значение возвращаемое функцией javascript
[Автоматизация IE и Web-интерфейса] Viktor1703 Май 19, 2012, 23:25:05
post Re: Проверка запущенного процесса на удаленной машине
[AutoIt для новичков] sngr Май 19, 2012, 23:06:52
post Re: Проверка запущенного процесса на удаленной машине
[AutoIt для новичков] Dm666 Май 19, 2012, 22:38:13
post Re: Иконка AutoIt3 для разных Dock-ов
[Графика и творчество в рамках AutoIt] Ganibal95 Май 19, 2012, 22:21:35

* Пользователи онлайн
  • Dot Гостей: 78
  • Dot Скрыт: 0
  • Dot Пользователей: 21
  • Dot Пользователи Online: