Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить 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
Имейте в виду, что скрипт должен быть сохранён в кодировке 866, это важно. Все пробелы заменяются на нижние подчеркивания, а кириллица - транслитерируется в латиницу (ГОСТ 7.79-2000, система Б) согласно таблице. Используется много вызовов Find, поэтому производительность скрипта оставляет желать лучшего.

Образец вызова скрипта:
Код: Выделить весь код
@Echo Off
Set Filename=Новый текстовый документ.txt
Echo Old filename = %Filename%
For /F "delims=" %%A In ('func_translit "%Filename%"') Do (Set Filename=%%A)
Echo New filename = %Filename%
Pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:27, 22-01-2013 | #2