![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Переименование части имен файлов |
|
|
CMD/BAT - [решено] Переименование части имен файлов
|
Новый участник Сообщения: 10 |
Здравствуйте.
Имеется куча файлов с латинскими названиями. Например: "brotogerys panychlorus, strix passerina, jynx torquilla.txt" и тому подобные. Также есть csv файл с переводом, т.е. "strix passerina=Little Owl", "brotogerys panychlorus=Yellow-billed Thrush" (две колонки: первая - латинские, вторая - английские) и т.п. Вообщем нужно все латинские названия в именах файлов переименовать в английские. Желательной батником. Своих познаний не хватило. Нужна помощь. Можно составить батник только для первых указанных выше названий, дальше я пойму принцип и составлю все что нужно в пакетном режиме. Заранее спасибо. |
|
Отправлено: 13:50, 11-10-2015 |
Ветеран Сообщения: 1759
|
|
Отправлено: 14:08, 11-10-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Разделитель ;
У меня файлы вида "brotogerys panychlorus, strix passerina, jynx torquilla.txt", т.е. в названии одного файла несколько (2-3) латинских словосочетаний. В csv файле эти же названия, но по-одному, одиночные, т.е. "brotogerys panychlorus;Yellow-billed Thrush", "strix passerina;Little Owl". Вот эти одиночные и нужно найти в названиях файлов и заменить на английские. Предложенный Вами вариант ищет только одиночные названия (ren "strix passerina.txt" в "Little Owl.txt"). По одиночным у меня батник свой есть. Нужен именно, чтобы переименовывал часть имени файлов. |
Отправлено: 14:31, 11-10-2015 | #3 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Видимо, нужно что-то вроде этого алгоритма:
1. прочитать имя первого файла 2. внести его имя в строковую переменную 3. заменить в переменной все найденные из csv-файла значения из первой колонки на значения из 2-й колонки 4. переименовать файл на полученное значение переменной. 5. перейти к следующему файлу |
Отправлено: 17:16, 11-10-2015 | #4 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать @echo off setlocal enabledelayedexpansion set "csv=example.csv" for /f "delims=" %%i in ('2^>nul dir/a-d/b') do ( set "x=%%~ni" for %%j in ("!x:, =" "!") do <"%csv%" ( for /f "tokens=2 delims=;" %%k in ('find/i %%j') do ( if defined y (set "y=!y!, %%k") else (set "y=%%k") ) )|| set "y=!x!" ren "%%i" "!y!%%~xi"& set "y=" ) endlocal exit/b |
|
Отправлено: 02:07, 12-10-2015 | #5 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Помогло! Большое спасибо!
|
Отправлено: 07:28, 12-10-2015 | #6 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Видимо, нужна небольшая доработка.
Вот часть csv-файла: dysithamnus_leucostictus;White-spotted Antvireo dysithamnus_leucostictus_leucostictus;White-streaked Antvireo (White-streaked) dysithamnus_leucostictus_tucuyensis;White-streaked Antvireo (Venezuelan) Вот файл: "dysithamnus_leucostictus.txt" Запускаю bat-файл, после переименования получается: "White-spotted Antvireo, White-streaked Antvireo (White-streaked), White-streaked Antvireo (Venezuelan).txt" А должно быть только "White-spotted Antvireo.txt". Где-то нужно поставить кавычки в скрипте или что-то типа этого? Хотя думаю, решу этот вопро сам (дополнительнзнак введу (!) в конце каждого лат. названия в ориг. именах) |
Последний раз редактировалось use809, 12-10-2015 в 09:00. Причина: сам решу Отправлено: 08:33, 12-10-2015 | #7 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать Цитата use809:
Практически угадали. Нужно добавить кавычки, тильду и точку с запятой: @echo off setlocal enabledelayedexpansion set "csv=example.csv" for /f "delims=" %%i in ('2^>nul dir/a-d/b') do ( set "x=%%~ni" for %%j in ("!x:, =" "!") do <"%csv%" ( for /f "tokens=2 delims=;" %%k in ('find/i "%%~j;") do ( if defined y (set "y=!y!, %%k") else (set "y=%%k") ) )|| set "y=!x!" ren "%%i" "!y!%%~xi"& set "y=" ) endlocal exit/b . Но, как выяснил, это тоже не панацея, так как в случае одновременного наличия в CSV-файле строк типа "dysithamnus_leucostictus;White-spotted Antvireo" и "bla-bla-bla_dysithamnus_leucostictus;White-streaked Antvireo (White-streaked)" файл "dysithamnus_leucostictus.txt" также будет переименован некорректно. Выход нашёл в использовании команды "FINDSTR" вместо команды "FIND": @echo off setlocal enabledelayedexpansion set "csv=example.csv" for /f "delims=" %%i in ('2^>nul dir/a-d/b') do ( set "x=%%~ni" for %%j in ("!x:, =" "!") do <"%csv%" ( for /f "tokens=2 delims=;" %%k in ('more^| findstr/bilc:"%%~j;"') do ( if defined y (set "y=!y!, %%k") else (set "y=%%k") ) )|| set "y=!x!" ren "%%i" "!y!%%~xi"& set "y=" ) endlocal exit/b , |
|
Отправлено: 09:33, 12-10-2015 | #8 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Объясню на примере, что получается.
Если файл имеет название "ptilinopus_porphyraceus, ptilinopus_pelewensis.txt", то переводит замечательно "Crimson-crowned Fruit-Dove, Palau Fruit-Dove.txt" Некоторых латинских названий нет в csv файле, т.е. их переводить не нужно, а оставить латинскими, т.к. в csv их не нашлось. Если имя "ptilinopus_rarotogensis, ptilinopus_fasciatus, ptilinopus_porphyraceus, ptilinopus_chrysogaster, ptilinopus_pelewensis" (1, 2 и 4-го нет в csv-файле, нет перевода), то оставляет таким же и в конце добавляет ", Palau Fruit-Dove.txt", т.е. "ptilinopus_rarotogensis, ptilinopus_fasciatus, ptilinopus_porphyraceus, ptilinopus_chrysogaster, ptilinopus_pelewensis, Palau Fruit-DoveFruit-Dove". Хотя нужно, чтобы было: "ptilinopus_rarotogensis, ptilinopus_fasciatus, Crimson-crowned Fruit-Dove, ptilinopus_chrysogaster, Palau Fruit-Dove" Пока не разобрался, что поправить. Во вложении txt-файл с латинскими названиями, data.csv и батник. |
Отправлено: 12:00, 12-10-2015 | #9 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать @echo off setlocal enabledelayedexpansion set "csv=data.csv" for /f "delims=" %%i in ('2^>nul dir/a-d/b') do ( set "x=%%~ni" for %%j in ("!x:, =" "!") do <"%csv%" ( for /f "tokens=2 delims=;" %%k in ('more^| findstr/bilc:"%%~j;"') do ( if defined y (set "y=!y!, %%k") else (set "y=%%k") ) )|| if defined y (set "y=!y!, %%~j") else (set "y=%%~j") ren "%%i" "!y!%%~xi"& set "y=" ) endlocal exit/b |
Отправлено: 13:48, 12-10-2015 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - переименование файлов при совпадении имен в результате копирования | vassagoo | Скриптовые языки администрирования Windows | 2 | 10-10-2011 18:48 | |
Перевод имен файлов (папок) в верхний регистр | truvo | Хочу все знать | 3 | 13-10-2010 02:35 | |
[решено] преобразование кодировки имен файлов | Magikanin2006 | Microsoft Windows NT/2000/2003 | 3 | 15-09-2010 12:51 | |
CMD/BAT - [решено] Цикл с использованием имен файлов | Bastet | Скриптовые языки администрирования Windows | 5 | 05-07-2010 19:28 | |
Как отключить автоподстановку имен файлов? | Astra55 | Microsoft Windows 2000/XP | 4 | 29-05-2006 07:47 |
|