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

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

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


Сообщения: 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