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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Замена в имени файлов кириллицы на латиницу

Ответить
Настройки темы
CMD/BAT - [решено] Замена в имени файлов кириллицы на латиницу

Аватара для VedunO

Новый участник


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

Профиль | Отправить PM | Цитировать


Подскажите, как можно заменить русские буквы на латинские во всех файлах данной папки?
Я имею в виду похожие русские и латинские буквы, например: "а" (рус) на "a" латинскую и т.д.
Имена файлов различные, расширения тоже. Необходимо для последующей заливки на сервер,
а из-за кириллицы в именах файлов возникают проблемы...

Отправлено: 18:10, 22-01-2013

 

Новый участник


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

Профиль | Отправить PM | Цитировать


Цитата velmyshanovnyi:
небольшой апдейт для универсальности )) »
Дак а как же апдейтить, если необходима кодировка 866? Там эти спецсимволы при сохранении просто превращаются в вопрос и всё.

У меня есть папки с копирайтом ©️ в названии, их правильно видит обычный dir, но результаты через цикл for уже просто с буквой "c", такие папки не переименовываются, и ничего с этим не сделать, я так понимаю, как и с другими спецсимволами вне кодировки 866.
Также невозможно переименовать папки с восклицательным знаком, потому что ! превращается в Result
Также невозможно добавить в список замены запятуюб

Немного расширил ваш скрипт под свои хотелки, положу под спойлеры

Транслитерация имён папок

Код: Выделить весь код
@Echo Off
:: Кодировка файла Кириллица DOS (866)
SetLocal EnableDelayedExpansion
:: Путь к обрабатываемой папке
cls
echo.

if "%~1"=="" (goto END_NOPARAM) else (goto CHECK)
:CHECK 
if not exist %~1 (goto END_NOTEXIST) else (goto START)
:START
 
set "Folder=%1"
echo Обрабатываем папку %Folder%...
echo Будут затронуты только папки, не файлы.
echo.
pause

set /a count = 0
set /a count_renamed = 0
set /a count_skipped = 0

:: Список замен
Set preset=^
 а_a б_b в_v г_g д_d е_e є_ie ё_yo ж_zh з_z и_i ї_ji й_i к_k л_l м_m н_n о_o п_p р_r с_s т_t у_u ф_f х_kh ц_c ч_ch ш_sh щ_sch ъ_ ы_y ь_ э_e ю_yu я_ya №_# ^
 А_A Б_B В_V Г_G Д_D Е_E Є_Ye Ё_Yo Ж_Zh З_Z И_I Ї_Ji Й_I К_K Л_L М_M Н_N О_O П_P Р_R С_S Т_T У_U Ф_F Х_Kh Ц_C Ч_Ch Ш_Sh Щ_Sch Ъ_ Ы_Y Ь_ Э_E Ю_Yu Я_Ya

For /F "tokens=* delims=" %%A In ('Dir /ad/b/s "%folder%"^| sort/r') Do (
        set /a count += 1
	Call :_translit "%%~nxA"

	if "%%~nxA"=="!Result!" (
            set /a count_skipped += 1
            echo [-][!count!] Пропускаю папку "%%~nxA", путь "%%~fA"
            echo [-] Пропускаю папку "%%~nxA", путь "%%~fA">>%~dp0folders.skipped.txt
        ) else (
            set /a count_renamed += 1
            echo [+][!count!] Переименовываю папку "%%~nxA" в "!Result!"
            echo [+] Переименовываю папку "%%~nxA" в "!Result!">>%~dp0folders.renamed.txt
	    Ren "%%A" "!Result!"
        )

)
echo.
echo ====================================
echo Переименовано папок: %count_renamed%
echo Пропущено папок: %count_skipped%
Pause
Exit

:_translit
Set Data=%~1
Set Result=
:_loop
Set Char=%Data:~,1%
For %%I In (%preset%) Do For /F "tokens=1,2 delims=_" %%A In ("%%I") Do If "%Char%"=="%%A" Set Char=%%B
Set Result=%Result%%Char%
Set Data=%Data:~1%
If Defined Data GoTo _loop
GoTo :EOF

:END_NOPARAM
echo Не указана папка или путь к папке в качестве параметра.
pause & exit

:END_NOTEXIST
echo Папка %~1 не существует.
pause & exit

Транслитерация имён файлов

Код: Выделить весь код
@Echo Off
:: Кодировка файла Кириллица DOS (866)
SetLocal EnableDelayedExpansion
:: Путь к обрабатываемой папке
cls
echo.

if "%~1"=="" (goto END_NOPARAM) else (goto CHECK)
:CHECK 
if not exist %~1 (goto END_NOTEXIST) else (goto START)
:START
 
set "Folder=%1"
echo Обрабатываем папку %Folder%...
echo Будут затронуты только файлы, не файлы.
echo Конечное расширение файла не будет затронуто. Отчёт.24года.смета.пример === otchet.24goda.smeta.пример
echo.
pause

set /a count = 0
set /a count_renamed = 0
set /a count_skipped = 0

:: Список замен
Set preset=^
 а_a б_b в_v г_g д_d е_e є_ie ё_yo ж_zh з_z и_i ї_ji й_i к_k л_l м_m н_n о_o п_p р_r с_s т_t у_u ф_f х_kh ц_c ч_ch ш_sh щ_sch ъ_ ы_y ь_ э_e ю_yu я_ya №_# ^
 А_A Б_B В_V Г_G Д_D Е_E Є_Ye Ё_Yo Ж_Zh З_Z И_I Ї_Ji Й_I К_K Л_L М_M Н_N О_O П_P Р_R С_S Т_T У_U Ф_F Х_Kh Ц_C Ч_Ch Ш_Sh Щ_Sch Ъ_ Ы_Y Ь_ Э_E Ю_Yu Я_Ya

For /F "tokens=* delims=" %%A In ('Dir /S /B /A:-D "%folder%"') Do (
        set /a count += 1
	Call :_translit "%%~nA"

	if "%%~nA"=="!Result!" (
            set /a count_skipped += 1
            echo [-][!count!] Пропускаю файл "%%~nxA", путь "%%~fA"
            echo [-] Пропускаю файл "%%~nxA", путь "%%~fA">>%~dp0files.skipped.txt
        ) else (
            set /a count_renamed += 1
            echo [+][!count!] Переименовываю файл "%%~nxA" в "!Result!%%~xA"
            echo [+] Переименовываю файл "%%~nxA" в "!Result!%%~xA">>%~dp0files.renamed.txt
            Ren "%%A" "!Result!%%~xA"
        )

)
echo.
echo ====================================
echo Переименовано файлов: %count_renamed%
echo Пропущено файлов: %count_skipped%

Pause
Exit

:_translit
Set Data=%~1
Set Result=
:_loop
Set Char=%Data:~,1%
For %%I In (%preset%) Do For /F "tokens=1,2 delims=_" %%A In ("%%I") Do If "%Char%"=="%%A" Set Char=%%B
Set Result=%Result%%Char%
Set Data=%Data:~1%
If Defined Data GoTo _loop
GoTo :EOF

:END_NOPARAM
echo Не указана папка или путь к папке в качестве параметра.
pause & exit

:END_NOTEXIST
echo Папка %~1 не существует.
pause & exit

Последний раз редактировалось delite, 01-06-2024 в 04:24.

Это сообщение посчитали полезным следующие участники:

Отправлено: 03:56, 01-06-2024 | #21



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


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

Профиль | Сайт | Отправить PM | Цитировать


Цитата Anonymоus:
Все пробелы заменяются на нижние подчеркивания »
узнать бы имена тех чертей из MS, которые решили в свое время разрешить пробел в именах файлов/папок...

-------
консольный клиент telegram для Windows: www.elapser.info

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:45, 26-06-2024 | #22



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Замена в имени файлов кириллицы на латиницу

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход