Имя пользователя:
Пароль:
 | Правила  

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

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

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


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

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


Здравствуйте.
Имеется куча файлов с латинскими названиями. Например: "brotogerys panychlorus, strix passerina, jynx torquilla.txt" и тому подобные.
Также есть csv файл с переводом, т.е. "strix passerina=Little Owl", "brotogerys panychlorus=Yellow-billed Thrush" (две колонки: первая - латинские, вторая - английские) и т.п.

Вообщем нужно все латинские названия в именах файлов переименовать в английские. Желательной батником. Своих познаний не хватило. Нужна помощь. Можно составить батник только для первых указанных выше названий, дальше я пойму принцип и составлю все что нужно в пакетном режиме. Заранее спасибо.

Отправлено: 13:50, 11-10-2015

 

Ветеран


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

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


use809, А разделитель в csv какой? Допустим ';'
Код: Выделить весь код
@echo off
setlocal

for /f "tokens=1,2 delims=;" %%i in (data.csv) do ren "%%i.txt" "%%j.txt"

Отправлено: 14:08, 11-10-2015 | #2



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

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


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


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

Профиль | Отправить 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
Благодарности: 0

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


Видимо, нужно что-то вроде этого алгоритма:
1. прочитать имя первого файла
2. внести его имя в строковую переменную
3. заменить в переменной все найденные из csv-файла значения из первой колонки на значения из 2-й колонки
4. переименовать файл на полученное значение переменной.
5. перейти к следующему файлу

Отправлено: 17:16, 11-10-2015 | #4


Ветеран


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

Профиль | Отправить 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
Благодарности: 0

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


Помогло! Большое спасибо!

Отправлено: 07:28, 12-10-2015 | #6


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


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

Профиль | Отправить 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
Благодарности: 575

Профиль | Отправить 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
Благодарности: 0

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


Вложения
Тип файла: zip Lat_to_Eng2.zip
(195.9 Kb, 26 просмотров)

Объясню на примере, что получается.
Если файл имеет название "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
Благодарности: 575

Профиль | Отправить 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



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

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

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




 
Переход