Цитата gora:
Замените часть скрипта на: »
|
Попробовал - перед блоком обработки файлов добавил в скрипт приведённый Вами блок для обработки папок. Теперь обрабатываются и папки и файлы!
Цитата gora:
Вот пример двух последовательных преобразований, остальное по аналогии: »
|
Заремаркировал ненужное (3 и 4 вариант) и попробовал ещё раз (первый + второй, т.е. как показано в Вашем втором посте) - не работает. Вернее, работает только та часть, что задана после второго CALL.
Да всё очень просто. Из этого:
ивановас.txt
петровгв.doc
сидоровоп.rtf
итомуподобныхлв.docx
...
эмат.html
нужно получить вот это:
Иванов
АС.txt
Петров
ГВ.doc
Сидоров
ОП.rtf
Итомуподобных
ЛВ.docx
...
Эм
АТ.html
Цитата gora:
Проверить не могу, ибо у меня нет измененного Вами скрипта и в нем могут быть ошибки. »
|
Да ничего сильно не менял, заменил только
Код:

Set preset=а_А б_Б в_В г_Г д_Д е_Е ё_Ё ж_Ж з_З и_И й_Й к_К л_Л м_М н_Н о_О п_П р_Р с_С т_Т у_У ф_Ф х_Х ц_Ц ч_Ч ш_Ш щ_Щ ъ_Ъ ы_Ы ь_Ь э_Э ю_Ю я_Я
на
Код:

Set preset=a_A b_B c_C d_D e_E f_F g_G h_H i_I j_J k_K l_L m_M n_N o_O p_P q_Q r_R s_S t_T u_U v_V w_W x_X y_Y z_Z
Думаю, что можно было и не менять. Наверное можно было после вариантов замены кириллицы просто дописать варианты замены латиницы.
Цитата gora:
а в Ваших примерах есть имена в три и даже в два символа!!! Что должен делать скрипт с такими именами? Я предполагал, что у Вас осмысленная задача (что следовало из примеров в первом посте) и Вы знаете на какие имена можно "натравить" скрипт, а какие нужно от него убрать. »
|
Здесь Вы правы, это моя оплошность - во-первых, упустил, что исходные имена могут быть не только на кириллице, но и на латинице, во-вторых, как-то сразу не пришло в голову упомянуть, что некоторые имена могут быть действительно короткими, хотя таковых в базе немного (например, Пак, Ли, Эм и т.д.).
P.S. С ранее названным непереименованием файлов на "j", "a", "b" и т.п. вопрос вроде разрешился - тоже моя оплошность, не полностью заремаркировал в команде
for те части скрипта, что относились к другим вариантам. Если оставляю только какой-то один - всё работает.
Сейчас скрипт выглядит так:
Код:

@Echo off
:: Кодировка файла Кириллица DOS (866)
SetLocal EnableDelayedExpansion
:: Путь к обрабатываемой папке
Set Folder=C:\Temp\888
:: Список замен
Set preset=а_А б_Б в_В г_Г д_Д е_Е ё_Ё ж_Ж з_З и_И й_Й к_К л_Л м_М н_Н о_О п_П р_Р с_С т_Т у_У ф_Ф х_Х ц_Ц ч_Ч ш_Ш щ_Щ ъ_Ъ ы_Ы ь_Ь э_Э ю_Ю я_Я a_A b_B c_C d_D e_E f_F g_G h_H i_I j_J k_K l_L m_M n_N o_O p_P q_Q r_R s_S t_T u_U v_V w_W x_X y_Y z_Z
:: После проверки слово ECHO удалить
:: Блок обработки имён папок
For /F "tokens=* delims=" %%A In ('Dir /S /B /A:D "%folder%"') Do (
rem Call :_case1 "%%~nxA"
rem Echo Ren "%%A" "!Result!"
Call :_case2 "%%~nxA"
Ren "%%A" "!Result!"
rem Call :_case3 "%%~nxA"
rem Echo Ren "%%A" "!Result!"
rem Call :_case4 "%%~nxA"
rem Echo Ren "%%A" "!Result!"
)
:: Блок обработки имён файлов
For /F "tokens=* delims=" %%A In ('Dir /S /B /A:-D "%folder%"') Do (
rem Call :_case1 "%%~nA"
rem Ren "%%A" "!Result!%%~xA"
Call :_case2 "%%~nA"
Ren "%%A" "!Result!%%~xA"
rem Call :_case3 "%%~nA"
rem Echo Ren "%%A" "!Result!%%~xA"
rem Call :_case4 "%%~nA"
rem Echo Ren "%%A" "!Result!%%~xA"
)
Pause
Exit
:_case1
:: Замена последнего символа в имени файла
Set Data=%~1
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& GoTo _next1
:_next1
Set Result=%Data:~0,-1%%Char%
GoTo :EOF
:_case2
:: Замена первого символа в имени файла
Set Data=%~1
Set Char=%Data:~0,1%
For %%I In (%preset%) Do For /F "tokens=1,2 delims=_" %%A In ("%%I") Do If %Char%==%%A Set Char=%%B& GoTo _next2
:_next2
Set Result=%Char%%Data:~1%
GoTo :EOF
:_case3
:: Замена двух последних символов в имени файла
Set Data0=%~1
Set Data=%Data0:~-2%
Set Result=
:_loop3
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& GoTo _next3
:_next3
Set Result=%Result%%Char%
Set Data=%Data:~1%
If Defined Data GoTo _loop3
Set Result=%Data0:~0,-2%%Result%
GoTo :EOF
:_case4
:: Замена трех символов в имени файла (с четвертого по шестой)
Set Data0=%~1
Set Data=%Data0:~3,3%
Set Result=
:_loop4
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& GoTo _next4
:_next4
Set Result=%Result%%Char%
Set Data=%Data:~1%
If Defined Data GoTo _loop4
Set Result=%Data0:~0,3%%Result%%Data0:~6%
GoTo :EOF