|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Замена в имени файлов кириллицы на латиницу |
|
|
CMD/BAT - [решено] Замена в имени файлов кириллицы на латиницу
|
Новый участник Сообщения: 11 |
Профиль | Отправить PM | Цитировать Подскажите, как можно заменить русские буквы на латинские во всех файлах данной папки?
Я имею в виду похожие русские и латинские буквы, например: "а" (рус) на "a" латинскую и т.д. Имена файлов различные, расширения тоже. Необходимо для последующей заливки на сервер, а из-за кириллицы в именах файлов возникают проблемы... |
|
Отправлено: 18:10, 22-01-2013 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать VedunO, для этого вам понадобится создать вот такой вот скрипт и разместить его рядом с тем, откуда он будет вызываться, либо же добавить в path:
func_translit.cmd @Echo Off :: Inquisitor, 2013 SetLocal EnableDelayedExpansion :: Первый аргумент служит в качестве входящих данных. Set Data=%~1 :: Проверяем на то, передан ли аргумент и заменяем пробелы на нижнее :: подчеркивание. If Defined Data (Set Data=!Data: =_!) Else (Exit /B 1) :: Посимвольная обработка и поиск соответствия символам кириллицы :: в соответствии с таблицей транслитерации. Если символ не указан в :: таблице - он остается неизменным. Set Result= :Translit Set Char=!Data:~,1! For /F "tokens=2 delims==" %%A In ('Find "::#%Char%=" "%~dpnx0"') Do (Set Char=%%A) Set Result=!Result!!Char! If Not "!Data:~1!"=="" ( Set Data=!Data:~1! GoTo Translit ) Else ( Echo !Result! ) Exit /B 0 :: Таблица транслитерации ::#a=a ::#б=b ::#в=v ::#г=g ::#д=d ::#е=e ::#ё=yo ::#ж=zh ::#з=z ::#и=i ::#й=i ::#к=k ::#л=l ::#м=m ::#н=n ::#о=o ::#п=p ::#р=r ::#с=s ::#т=t ::#у=u ::#ф=f ::#х=kh ::#ц=c ::#ч=ch ::#ш=sh ::#щ=sh ::#ъ=. ::#ы=y ::#ь=. ::#э=e ::#ю=yu ::#я=ya ::#А=A ::#Б=B ::#В=V ::#Г=G ::#Д=D ::#Е=E ::#Ё=Yo ::#Ж=Zh ::#З=Z ::#И=I ::#Й=I ::#К=K ::#Л=L ::#М=M ::#Н=N ::#О=O ::#П=P ::#Р=R ::#С=S ::#Т=T ::#У=U ::#Ф=F ::#Х=Kh ::#Ц=C ::#Ч=Ch ::#Ш=Sh ::#Щ=Sh ::#Ъ=. ::#Ы=Y ::#Ь=. ::#Э=E ::#Ю=Yu ::#Я=Ya Образец вызова скрипта: |
Отправлено: 21:27, 22-01-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать Цитата Anonymоus:
@Echo Off :: Inquisitor, 2013 SetLocal EnableDelayedExpansion :: Первый аргумент служит в качестве входящих данных. Set Data=%~1 :: Проверяем на то, передан ли аргумент и заменяем пробелы на нижнее :: подчеркивание. If Defined Data (Set Data=!Data: =_!) Else (Exit /B 1) For %%I In (a_a б_b в_v г_g д_d е_e ё_yo ж_zh з_z и_i й_i к_k л_l м_m н_n о_o п_p р_r с_s т_t у_u ф_f х_kh ц_c ч_ch ш_sh щ_sh ъ_. ы_y ь_. э_e ю_yu я_ya А_A Б_B В_V Г_G Д_D Е_E Ё_Yo Ж_Zh З_Z И_I Й_I К_K Л_L М_M Н_N О_O П_P Р_R С_S Т_T У_U Ф_F Х_Kh Ц_C Ч_Ch Ш_Sh Щ_Sh Ъ_. Ы_Y Ь_. Э_E Ю_Yu Я_Y) Do For /F "tokens=1,2 delims=_" %%A In ("%%I") Do Set Data=!Data:%%A=%%B! Echo !Data! Exit /B 0 |
|
Последний раз редактировалось gora, 28-01-2013 в 08:11. Отправлено: 23:28, 22-01-2013 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать gora, оригинально!
|
Отправлено: 23:46, 22-01-2013 | #4 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать gora, браво, превосходно! Мне такой вариант решения даже в голову не пришел.
|
|
Отправлено: 00:22, 23-01-2013 | #5 |
Новый участник Сообщения: 11
|
Профиль | Отправить PM | Цитировать Anonymоus, gora,
Благодарю выручили!!! |
Отправлено: 09:19, 23-01-2013 | #6 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать Цитата VedunO:
|
|
Отправлено: 09:24, 23-01-2013 | #7 |
Новый участник Сообщения: 11
|
Профиль | Отправить PM | Цитировать рано обрадовался
и попутно вопрос: как можно это применить к списку файлов? (обработать все файлы в указанной папке) |
Отправлено: 09:47, 23-01-2013 | #8 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать @Echo Off :: Кодировка файла Кириллица DOS (866) SetLocal EnableDelayedExpansion :: Путь к обрабатываемой папке Set Folder=e:\Temp\3 3 :: При замене командой SET (как выяснилось) заглавные и маленькие буквы не различаются :: Всвязи с этим не смысла использовать полный список (с маленькими и заглавными буквами), достаточно любой половины :: Здесь использована половина с маленькими буквами, поэтому после транслитерации новые имена окажутся в нижнем регистре :: Если требуются имена в верхнем регистре, то следует использовать половину с заглавными буквами :: Список замен :: Set preset=а_a б_b в_v г_g д_d е_e ё_yo ж_zh з_z и_i й_i к_k л_l м_m н_n о_o п_p р_r с_s т_t у_u ф_f х_kh ц_c ч_ch ш_sh щ_sh ъ_. ы_y ь_. э_e ю_yu я_ya А_A Б_B В_V Г_G Д_D Е_E Ё_Yo Ж_Zh З_Z И_I Й_I К_K Л_L М_M Н_N О_O П_P Р_R С_S Т_T У_U Ф_F Х_Kh Ц_C Ч_Ch Ш_Sh Щ_Sh Ъ_. Ы_Y Ь_. Э_E Ю_Yu Я_Ya Set preset=а_a б_b в_v г_g д_d е_e ё_yo ж_zh з_z и_i й_i к_k л_l м_m н_n о_o п_p р_r с_s т_t у_u ф_f х_kh ц_c ч_ch ш_sh щ_sh ъ_. ы_y ь_. э_e ю_yu я_ya :: После проверки слово ECHO удалить For /F "tokens=* delims=" %%A In ('Dir /S /B /A:-D "%folder%"') Do ( Call :_translit "%%~nA" Echo Ren "%%A" "!Data!%%~xA" ) Pause Exit :_translit Set Data=%~1 Set Data=%Data: =_% For %%I In (%preset%) Do For /F "tokens=1,2 delims=_" %%A In ("%%I") Do Set Data=!Data:%%A=%%B! GoTo :EOF |
Последний раз редактировалось gora, 28-01-2013 в 08:13. Причина: была пропущена "Я" Отправлено: 10:55, 23-01-2013 | #9 |
Старожил Сообщения: 263
|
Профиль | Отправить PM | Цитировать gora, попытался с двумя файлами:
Текстовый документ.txt и Документ Microsoft Office Word.docx на выходе: vекbvовlй_докgменv.txt и Докgменv_Microsoft_Office_Word.docx |
Отправлено: 12:10, 23-01-2013 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Копирование имени файлов в 1 файл | Kalyai | Скриптовые языки администрирования Windows | 0 | 25-07-2012 12:44 | |
Интерфейс - как переименовать папку с кирилицы на латиницу или перенести все файлы? | kulgovd | Microsoft Windows 7 | 1 | 04-06-2012 02:33 | |
CMD/BAT - Сравнение файлов по имени | stasy9110 | Скриптовые языки администрирования Windows | 1 | 04-12-2011 21:27 | |
CMD/BAT - Удаление старых файлов по имени файлов | Bиктор | Скриптовые языки администрирования Windows | 1 | 19-04-2010 03:37 | |
Пишем JavaScript перекодировки из кириллицы в латиницу | maasja | Вебмастеру | 16 | 08-06-2009 22:10 |
|