AkelPad Forum Index AkelPad
Support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Пакетное изменение кодировки файлов
Goto page 1, 2, 3  Next
 
Post new topic   Reply to topic    AkelPad Forum Index -> Discussion (Russian)
View previous topic :: View next topic  
Author Message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5293

PostPosted: Thu Oct 28, 2010 5:15 pm    Post subject: Пакетное изменение кодировки файлов Reply with quote

Существует несколько способов:

Способ 1.
- Открываем все файлы для перекодирования в AkelPad'е с режимом MDI/PMDI. Удобно найти интересующие файлы в файловом менеджере (Проводник, Total Commander и т.д.) и затем файлы из найденного списка перетащить в окно AkelPad'а.
- Затем "Главное меню->Файл->Сохранить все как...".
- Минусы: весьма ресурсоемкая процедура, если файлов много и они не маленькие.

Способ 2.
Скрипт OpenSaveMask.js.

Пример кнопки Total Commander'а для конвертирования выделенных файлов в UTF-8:
Название: Конвертировать в UTF-8
Команда: AkelPad.exe
Параметры:
Code:
/Call("Scripts::Main", 1, "OpenSaveMask.js", `-OpenList="%L" -SaveDir="%T" -SaveCodepage=65001 -SaveBOM=1`)

Также отметим галочку "запускать в свернутом виде".

DropConverter.cmd - конвертирование переданных файлов в UTF-8:
Code:
::Batch drop convertor. Usage - drag'n'drop files on this batch file via Windows Explorer.
@ECHO OFF
if [%1]==[] goto :EOF

set save_codepage=65001
set save_bom=1
set tempfile=AkelConvert.lst

::Call to EvalCmdEsc.js - create list from passed files to command line.
::Call to OpenSaveMask.js - convert files in list.
start /MIN AkelPad.exe ^
/Call("Scripts::Main", 1, "EvalCmdEsc.js", `var pArgs='%*'; pArgs=pArgs.replace(/[ ]?"(.*?)"%%%%7C[ ]/g, "$1%%%%5Cn"); AkelPad.Command(4101); AkelPad.ReplaceSel(pArgs); AkelPad.SaveFile(0, "%temp%\%tempfile%", 65001, 1); AkelPad.Command(4324);`) ^
/Call("Scripts::Main", 1, "OpenSaveMask.js", `-OpenList="%temp%\%tempfile%" -SaveDir="" -SaveCodepage=%save_codepage% -SaveBOM=%save_bom%`)


Способ 3.
Cmd файл для пакетного изменения кодировки файлов для режимов MDI/PMDI, с включенной опцией "Не открывать программу дважды".

Code:
::Command line files convertion (MDI/PMDI).
@ECHO OFF

::If open_codepage == -1, then autodetect codepage.
::If open_bom == -1, then autodetect bom.
set open_mask=c:\My Folder\*.txt
set open_codepage=-1
set open_bom=-1
set save_codepage=65001
set save_bom=1

start AkelPad.exe /C- /B- /L+
for /F "delims=" %%a in ('dir "%open_mask%" /B /S /A-D') do (
  echo "%%a"
  AkelPad.exe "/OpenFile('%%a', %open_codepage%, %open_bom%)" "/SaveFile('%%a', %save_codepage%, %save_bom%)" "/Command(4324)"
)
AkelPad.exe /quit
echo "---DONE---"
PAUSE


Last edited by Instructor on Thu Feb 07, 2013 9:19 am; edited 28 times in total
Back to top
View user's profile Send private message Send e-mail
AlexShu



Joined: 29 Dec 2009
Posts: 4

PostPosted: Tue Nov 02, 2010 9:10 pm    Post subject: Reply with quote

Что поменял следующие значения
Code:
set open_mask=E:\_Progs0\Notepads\AkelPad4_TC\channels\*.*
set open_codepage=65001
set open_bom=0
set save_codepage=1251
set save_bom=0

Всё остальное оставил как есть. Но программа не работает.
Пишет
Code:
"а" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.

Запускал из дериктории AkelPad'a (E:\_Progs0\Notepads\AkelPad4_TC)
В чём причина не работы?

Win XP Pro sp2
AkelPad 4.5.0
Back to top
View user's profile Send private message
FeyFre



Joined: 07 Aug 2007
Posts: 2033
Location: Vinnitsa, Ukraine

PostPosted: Tue Nov 02, 2010 11:36 pm    Post subject: Reply with quote

Instructor
Моя попытка натравить Ваш батничек заканчивается ещё плачевнее.
Акел вроде бы делает что сказано(время модификации файла меняется, но внутри вроде бы норм), но для каждого вызова выскакивает вот такое вот окно(не все сразу, а по очереди: это закрыл, следующее выглянуло):

Владелец окна - процесс csrss.exe И делает он это очень много раз(но Акел в фоне работает исправно).
Поэкспериментировал и понял: просто start AkelPad.exe .... в цикле маловато будет. По такой причине:
Когда они запускаются, первый запускается, следующие при запуске обращаются к первому, по очереди(причем нету гарантий те, кого запустили раньше обработается первым, по отпечаткам времени файлов проверил). Так как операции выполняются не моментально, то очередь процессов растет. А ОС ну может слишком много процессов держать, потому одна из главных шишек винды - csrss.exe и посылала те процессы которые не могла переварить(А в моём случае выдержала очередь в 385 процесса(живих, остальные зомбились, максимум по 2 мб памяти себе отвоевывали) +/- 20 шт системных. Я натравил скрипт на мануал по php - 7683 файла). А рассасывается оочень медленно(у меня в зависимости от размеров обрабатываемых файлов(2-60кб) 200-350кб обработанных текстов в минуту.) Цифры скорее всего зависят от производительности машины и настроек Акела(кол-ва подгруженных плагинов - занятой памяти).

Нужно паузу после start поставить. Сказал бы миллисекунд на 40, не меньше.
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5293

PostPosted: Wed Nov 03, 2010 2:55 am    Post subject: Reply with quote

AlexShu
Попробуйте обновленную версию скорее всего дело было в отсутствующих кавычках.

FeyFre
Обновил пример. Сейчас должно быть и быстрее, и без проблем с количеством процессов.

Добавил информацию, что данный пример для режимов MDI/PMDI.
Back to top
View user's profile Send private message Send e-mail
FeyFre



Joined: 07 Aug 2007
Posts: 2033
Location: Vinnitsa, Ukraine

PostPosted: Wed Nov 03, 2010 7:55 am    Post subject: Reply with quote

Instructor
Ну Акел собственно и был в PMDI, и "Не открывать дважды" тоже включено было. Впрочем вечером попробую новую версию, отпишусь.
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
AlexShu



Joined: 29 Dec 2009
Posts: 4

PostPosted: Wed Nov 03, 2010 7:30 pm    Post subject: Reply with quote

Instructor
Большое спасибо. Пока всё работает.

Только нельзя ли сделать так чтобы AkelPad грузился свёрнутым, а то это мигание раздражает.

Под миганием я подразумеваю: закрытие документа с белым фоном -> появление серого фона самого AkelPad'a -> загрузка документа с белым фоном.

Стоят галки "Не открывать программу дважды" и "Многооконный (MDI)"
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5293

PostPosted: Wed Nov 03, 2010 7:42 pm    Post subject: Reply with quote

AlexShu
Чтобы скрыть окно AkelPad'а, строку:
Code:
start AkelPad.exe /C- /B- /L+

заменяем на
Code:
start AkelPad.exe /C- /B- /L+ /Call("Scripts::Main", 1, "EvalCmd.js", `'AkelPad.SystemFunction().Call("user32::ShowWindow", AkelPad.GetMainWnd(), 0 /*SW_HIDE*/);'`)

Но тогда в случае какой-либо критической ошибки, вы не увидите сообщения, т.к. окно AkelPad'а будет скрыто. И свернуть пока не получится, т.к. AkelPad выходит на передний план при загрузке файла.
Back to top
View user's profile Send private message Send e-mail
bvb



Joined: 24 Apr 2011
Posts: 1

PostPosted: Sun Apr 24, 2011 12:53 pm    Post subject: пакетное перекодирование текстовых файлов Reply with quote

Возможен ли сабж с помощью akelpada?
Поясню. Есть куча текстовых файлов в разных кодировках. Надо все их перевести в одну (1251). Открывать файлы по очереди и сохранять в нужной кодировке можно, но очень неудобно и долго.
Может быть, можно как-то командной строкой это сделать?
Back to top
View user's profile Send private message
FeyFre



Joined: 07 Aug 2007
Posts: 2033
Location: Vinnitsa, Ukraine

PostPosted: Sun Apr 24, 2011 2:41 pm    Post subject: Reply with quote

Читаем документацию http://akelpad.cvs.sourceforge.net/viewvc/akelpad/akelpad_4/AkelFiles/Docs/AkelHelp-Rus.htm
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5293

PostPosted: Sun Apr 24, 2011 4:14 pm    Post subject: Reply with quote

bvb
См. первое сообщение темы.
Back to top
View user's profile Send private message Send e-mail
VladSh



Joined: 29 Nov 2006
Posts: 2597
Location: Киев, Русь

PostPosted: Wed Feb 06, 2013 9:15 pm    Post subject: Reply with quote

Instructor
Сейчас есть возможность зарегистрировать AkelPad в системе, как раньше. Может можно как-то переписать скрипт, чтобы когда зарегена, не открывать программу вообще?
Back to top
View user's profile Send private message Visit poster's website
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5293

PostPosted: Thu Feb 07, 2013 9:06 am    Post subject: Reply with quote

VladSh
Плагин Scripts в режиме ActiveX не поддерживает методы AkelPad.OpenFile, AkelPad.ReadFile, AkelPad.SaveFile - см. Scripts-Rus.txt.
Back to top
View user's profile Send private message Send e-mail
VladSh



Joined: 29 Nov 2006
Posts: 2597
Location: Киев, Русь

PostPosted: Thu Feb 07, 2013 9:41 am    Post subject: Reply with quote

Instructor
Ограничение по безопасности?
Back to top
View user's profile Send private message Visit poster's website
FeyFre



Joined: 07 Aug 2007
Posts: 2033
Location: Vinnitsa, Ukraine

PostPosted: Thu Feb 07, 2013 9:55 am    Post subject: Reply with quote

VladSh, ограничения по сути. Указанные функции запускают функции самого АР. А если оного нету, то что им тогда делать?
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
VladSh



Joined: 29 Nov 2006
Posts: 2597
Location: Киев, Русь

PostPosted: Thu Feb 07, 2013 11:58 am    Post subject: Reply with quote

FeyFre
Для FileSystemObject.GetFile(fileName) ненужно никакого окна. Методы можно подкорректировать так, чтобы при отсутствии окна файл открывался/сохранялся. Естественно, методы, работающие через UI (GetSelText, ReplaceSel и т.п.) не будут работать, но могут работать GetTextRange, и так в BackEnd'е вполне можно менять и сохранять файлы, используя мощь функционала AkelPad'а.
Почему нет? Не вижу тут ничего плохого или нереализуемого.

И это не только ActiveX касается. Можно добавить параметр для командной строки загружать/не_загружать окно, и тогда универсально буит работать, даже без ActiveX.
Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    AkelPad Forum Index -> Discussion (Russian) All times are GMT
Goto page 1, 2, 3  Next
Page 1 of 3

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


SourceForge.net Logo Powered by phpBB © 2001, 2005 phpBB Group