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

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

Ответить
Настройки темы
Любой язык - Скрипт для переименовывания файлов с латиницы на русский лад

Старожил


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

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


Привет!
Вот на скрине можно увидеть много файлов формата fb2 подписанных латиницей.

Возможен ли скрипт создать (или как, правильне bat - ник ?) который бы "переподписал" эти самые файлы русскими буквами?
Причем в именах файлов-книг были бы только названия книг без автора.
Такое реально вообще-то?


Отправлено: 15:10, 05-01-2021

 

Аватара для YuS_2

Crazy


Contributor


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

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



Цитата Latinyanin:
Все-таки придется тупо вручную наверное переиеименовывать. »
с таким подходом... многое придется делать вручную

Цитата Latinyanin:
Ни один из трех скриптов опыта не дал результата потребного. »
Что не удивительно. Вы вообще различия между powershell и cmd не видите/не знаете?

Цитата Latinyanin:
Помещал в ту ж папку, что и файлы книг »
скрипт (мой, во всяком случае) можно помещать куда угодно, но с указанием абсолютного пути к каталогу с книгами...

Чтобы вам было попроще, сделал запускающий сценарий cmd (run_me.bat), который запускает необходимый сценарий powershell (script.ps1) - см. приложенный архив с необходимой структурой внутри:
TEMP.rar
Книги надо будет поместить в каталог BOOKS, расположенный рядом со скриптом script.ps1
Если упаковка книг не требуется, то в батнике необходимо удалить ключ -fbz
Всё. Запускаем батник и ожидаем выполнения скрипта. Появляющиеся в процессе работы скрипта красные надписи, необходимо читать внимательно и полностью.

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 14-01-2021 в 21:26.


Отправлено: 21:18, 14-01-2021 | #21



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

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


Ветеран


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

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


Цитата Latinyanin:
который бы "переподписал" эти самые файлы русскими буквами? »
кто то старался, русские переделывал в транслит, а вы хотите обратно все испортить

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


Отправлено: 16:53, 15-01-2021 | #22


Старожил


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

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


Снова привет!



Порекомендованная программа FB2Toolbox очень помогла с переименовывавнием файлов fb2 книг. Но!
Все-таки мне нужен скрипт небольшой, который бы "допилил" под мои нужды результаты работы FB2Toolbox. На скриншооте
FB2Toolbox.exe
виден список книг одной серии. Скрипт должен добавить в имя файла два компонента:
один пробел перед и после каждого тире(-)
добавить ноль перед каждой цифрой списка от 1 до 9
сама папка с файлами для переименовывания
Возможно?

Может надо отдельную тему создать?

Последний раз редактировалось Latinyanin, 21-01-2021 в 14:41.


Отправлено: 14:22, 21-01-2021 | #23


Старожил


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

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


Порекомендованная программа FB2Toolbox очень помогла с переименовывавнием файлов fb2 книг

Отправлено: 15:34, 21-01-2021 | #24


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


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

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


Интересно а как .... в предложенном YuS_2 скрипте
1. увеличить рекурсию более 2 уровней в скрипте
2. бороться с флагом "для чтения" который навешивается автоматом на входную и выходную папки
3. вывести обработку ошибок ( скажем так ...... 1 - если нет тега "автор", "название" - оставлять как есть(ныне частенько так спешат верстать фб что их просто нет).... 2 - добавить цифровую составляющую к копиям, что бы не сносилось в ноль....3 - почему то некоторые зип не дают скрипту прочесть теги, только по распаковке)
4. ..... наверное главное))) литература для "чайника" по повершелл.... просто чую что никто этого не сделает))) а хочется понять и разобраться, чтоб самому сделать.
..........
если по п. 1 . еще что то встречается, то вот по п2. в ступоре почему система автоматом вывешивает флаг" для чтения" - остаются исходные файлы.... пробовал вручную менять , но тут же был отшит системой)))

Последний раз редактировалось Андрей_Ахмедов@vk, 16-03-2021 в 03:45. Причина: дублирование информации

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

Отправлено: 03:32, 16-03-2021 | #25


Забанен


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

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


Андрей_Ахмедов@vk, 1 -Recurse -Depth ...
2. -Force (или просто снять бит)
3. try .. catch .. finally; throw
4. Get-Help
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:09, 16-03-2021 | #26


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


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

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


greg zakharov, Get-Help увы не для "чайника" изучавшего древний паскаль во времена эмулятора 8086))... ну еще чуток ЛУА для сталкера - мелкие правки для внесения своей "великой лепты" в игру и чужие моды )).....
По хелперу надо иметь представление что именно ищещь.
А основная литература либо для сисадминов, либо затрагивает больше именно те моменты для чего в общем то и делался повершелл - администрирование(ну кроме банального "Привет мир" в начале).
Вот что из отряда прикладных повседневных задач для пользователей из литературы бы?
И СПАСИБО!
За внимание и ответ.

Отправлено: 12:54, 16-03-2021 | #27


Забанен


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

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


Андрей_Ахмедов@vk, увы, но проще способа нет, ибо когда лично брался за Powershell (тогда ещё Monad), вообще не было никакой документации, так что лучше с Get-Help и начать. Проще никак. В моём случае мне подспорьем был опыт программирования на C#, чтение спецификаций и монографии Рихтера о CLR, а также много часов экспериментов с кодом и отладчиком.

Отправлено: 13:18, 16-03-2021 | #28


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Андрей_Ахмедов@vk:
1. увеличить рекурсию более 2 уровней в скрипте »
там нет такого ограничения.

Цитата Андрей_Ахмедов@vk:
2. бороться с флагом "для чтения" который навешивается автоматом на входную и выходную папки »
Хмм, в планах такого не было...
Покажите скриншот - как именно, Вы проверяете атрибуты?

Цитата Андрей_Ахмедов@vk:
3. вывести обработку ошибок ( скажем так ...... 1 - если нет тега "автор", "название" - оставлять как есть(ныне частенько так спешат верстать фб что их просто нет).... 2 - добавить цифровую составляющую к копиям, что бы не сносилось в ноль....3 - почему то некоторые зип не дают скрипту прочесть теги, только по распаковке) »
1. Посмотрю, как лучше сделать
2. С копиями тоже посмотрю...
3. Не понял про что речь. Архивы сначала распаковываются, а потом уже обрабатываются файлы *.fb2, никакие теги внутри архивов не парсятся.

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 18-03-2021 в 21:08.


Отправлено: 20:52, 18-03-2021 | #29


Аватара для YuS_2

Crazy


Contributor


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

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


Андрей_Ахмедов@vk,
Цитата YuS_2:
1. Посмотрю, как лучше сделать
2. С копиями тоже посмотрю... »
Как-то так:
Код: Выделить весь код
param(
	[string]$in = '.\BOOKS',
	[string]$out = '.\BOOKS_OUT',
	[string[]]$include = ('*.fbz','*.zip'),
	# Каталог для книг .fb2, если какой-либо тег отсутствует
	# Для дальнейшего ручного разбора...
	[string]$error = '.\ERROR',
	# Путь к внешнему архиватору 7zip (консольному)
	[string]$zippath = 'd:\Program Files\7-Zip\7z.exe',
	# Ключ использования внешнего архиватора
	[switch]$extzip,
	# Ключ переименования распаковываемых файлов "имя файла_1", 
	# если существуют, иначе будет вопрос на действие от архиватора
	# Работает только со внешним архиватором 7zip.
	[switch]$copy,
	# Ключ для удаления исходных архивов .zip и книг .fb2
	[switch]$delete
)
function expand-zip {
	process {
		try{
			if ($_.extension -match '\.fbz|\.zip'){
				if ($_.extension -eq '.fbz'){ren $_.fullname $($_.basename+'.zip')}
				$zip = gi $($_.fullname -replace '\.fbz','.zip')
				if ($extzip){
					$arg = " e $($zip.fullname)"
					if($zippath -match '7z.exe$'){
						pushd $zip.directoryname
						if ($copy){&$zippath 'e' $($zip.fullname) '-aou'}
						else {&$zippath 'e' $($zip.fullname)}
						popd
					} else {"Использовать необходимо 7z.exe"}
				} else {expand-archive $zip.fullname $zip.directoryname -ea 1}
				if($delete){del $zip}
			}
		} catch {
			popd
			write-host "ошибка: $_" -for red
		}
	}
}
# https://docs.microsoft.com/ru-ru/windows/win32/fileio/naming-a-file?redirectedfrom=MSDN
$except = '\[|\]|<|>|\*|\"|:|\?|\\|/|\|'
if (!(test-path $out -patht 'Container')){$null = md $out}
if (!(test-path $error -patht 'Container')){$null = md $error}
$folder = gi $out

dir $in -inc $include -file -rec|expand-zip

dir $in -inc '*.fb2' -file -rec|%{
	$arch,$b,$d,$d_author,$ser = $null,$null,$null,$null,$null
	if ((gc $_.fullname -tot 1) -match 'windows-1251'){
		if ($pscore = $psversiontable.psversion.major -gt 5){
			$encoding = 'windows-1251'
		} else {$encoding = 'default'}
	} else {$encoding = 'utf8'}
	$book = ([xml](gc $_.fullname -enc $encoding)).fictionbook.description.'title-info'
	if(!(
		$book.author.'first-name' -and 
		$book.author.'last-name' -and
		$book.'book-title'
	)){
		write-host "Заполните теги: author.'first-name',author.'last-name','book-title'" -for red
		write-host "файл - $($_.name)" -for red
		mi $_.fullname $error; return
	}
	$d = $folder.fullname+'\'+(
		(([array]$book.author)[0].'last-name'+' '+([array]$book.author)[0].'first-name') -replace $except
	)
	if(!(test-path $d -patht 'Container')){$d_author = md $d} else {$d_author = gi $d}
	if ($book.sequence.number){
		$b = $d_author.fullname+'\'+($book.sequence.name -replace ' ','-' -replace $except)
		if(!(test-path $b -patht 'Container')){$ser = md $b} else {$ser = gi $b}
		$new = $ser.fullname+'\'+$book.sequence.number+'_'+(
			(($book.sequence.name -replace ' ','-')+'_'+$book.'book-title')  -replace $except
		)
	} else {
		$new = $d_author.fullname+'\'+($book.'book-title' -replace $except)
	}
	$tmp = $_
	try{mi $_.fullname $($new+$_.extension) -ea 1} catch {
		write-host "Невозможно переместить файл: $($tmp.fullname)" -for cyan
		write-host "Ошибка: $_" -for red
	}
	$arch = gi ($new+$_.extension)
	if ($extzip){
		if($zippath -match '7z.exe$'){
			pushd $arch.directoryname
			&$zippath 'a' -tzip $($arch.basename+'.zip') $($arch.name)
			popd
		}
	} else {
		compress-archive $arch.fullname $($arch.directoryname+'\'+$arch.basename+'.zip')
	}
	if ($delete){del $arch}
}
dir $folder.fullname -filt '*.zip' -file -rec|ren -new {$_.basename+'.fbz'}
Дополнительно, к описанию выше:
Перемещает файлы без тегов в отдельный каталог, для ручного разбора...
Внедрен внешний архиватор 7zip, с возможностью оставлять копии исходных файлов...
Пример:
.\script.ps1 -ext -copy -del
- используется внешний архиватор
- файлы извлекаемые из архивов, будут переименованы (только с помощью внешнего архиватора), если одноименные файлы присутствуют в каталоге
- исходные файлы архивов и книг, будут удалены после обработки.

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 19-03-2021 в 19:04. Причина: дополнение описания

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

Отправлено: 15:26, 19-03-2021 | #30



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Скрипт для автоматиеского копированеи файлов на удаленный сервер tutitam Скриптовые языки администрирования Windows 12 19-02-2013 15:09
VBS/WSH/JS - нужен vbs скрипт для отпраки файлов на mail exekill Скриптовые языки администрирования Windows 0 18-04-2012 16:28
Разное - [решено] Ищу программу для переименовывания файлов flower Программное обеспечение Windows 15 08-07-2010 18:40
Ищу программу переименовывания файлов venuko Хочу все знать 3 04-06-2009 19:44
Скрипт для копирования файлов с 1 сервера на несколько andro_id Программирование в *nix 2 04-09-2008 11:48




 
Переход