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

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

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

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


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

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


Здравствуйте!
Нужно очень сделать батничек, который переименовывает файлы PDF, а конкретнее заменяет в названиях существующих файлов символы " ", "_","+","=","&" на "-".
Я сделал что так что бы заменял только один символ, а вот как подставит регулярное выражение не пойму.

renamer.bat:
Код: Выделить весь код
for %%g in (*.pdf) do call :s_subroutine "%%~nxg" "%%g"
:s_subroutine
set _sss=%1
set _ddd=%_sss:_=-%
ren %2 %_ddd%
goto :eof
set _ddd=%_sss:_=-% вот эта строка заменяет все символы "_" на символ "-", а вот как здесь пристроить регулярное выражение мне не понятно.

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

Отправлено: 13:43, 25-01-2010

 

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


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

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


спасибо)
будем вникать)

-------
constantant.ru - САЙТЫ ОТ 60К


Отправлено: 13:01, 26-01-2010 | #11



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

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


Аватара для El Sanchez

Ветеран


Contributor


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

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


Цитата Constantant:
а без sed вообще ни как? »
Еще один изврат (сценарий обязательно сохранить в кодировке DOS (OEM866)):
Код: Выделить весь код
@Echo off

::"¬" это ALT+0172

Setlocal ENABLEDELAYEDEXPANSION
for /f "usebackq tokens=*" %%a in (`dir /b *.pdf`) do (
	set Out=
	set /a i=-1
	set "Str=%%~na"
	set "Str=!Str:_=-!"
	set "Str=!Str:+=-!"
	set "Str=!Str: =-!"
	set "Str=!Str:&=-!"
	call :func
	ren "%%a" !Str!.pdf
)
Endlocal
goto :eof

:func
set /a i+=1
call :parse set "char=%%Str:~%i%,1%%"
if "%Char%"=="" (
	set "Str=!Out:¬=-!"
	goto :eof
	)
if "%Char%"=="=" set Char=¬
set "Out=!Out!%Char%"
call :func
:parse
%*
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:25, 26-01-2010 | #12


Googler


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

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


Цитата El Sanchez:
Еще один изврат »
Класс!.. Но он не позволяет менять "!"... Если не против, немного доработал:
Код: Выделить весь код
@Echo Off

For %%Z In (*.pdf) Do Set "NameOld=%%Z"& Call :ReName
Exit /B 0

:ReName
  Set NameLen=0& Set NameNew=
:ReNameLoop
  Call Set "$C=%%NameOld:~%NameLen%,1%%"
  Set /A NameLen+=1

  If Not "%$C%"==" " If Not "%$C%"=="_" If Not "%$C%"=="+" If Not "%$C%"=="&" If Not "%$C%"=="=" (
  If Not "%$C%"==""  Set "NameNew=%NameNew%%$C%"& GoTo :ReNameLoop )
  If Not "%$C%"==""  Set "NameNew=%NameNew%-"& GoTo :ReNameLoop

  REN "%NameOld%" "%NameNew%"
GoTo :EOF

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

Отправлено: 05:26, 27-01-2010 | #13


Аватара для El Sanchez

Ветеран


Contributor


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

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



Цитата amel27:
Но он не позволяет менять "!" »
Так и не требуется ж

Цитата amel27:
Если не против, немного доработал »
amel27,
Вещь! И не надо подстановку делать, простое посимвольное сравнение.
Кстати, сравнил время выполнения моего сценария с вашим. Сгенерировал 1000 текстовых файлов с уникальными именами (%random%ы, разделенные этими 5 символами) и включил секундомер. Мой сценарий выполнился в среднем за 1:51.8 мин., а ваш за 1:28.2 мин., так что Constantant, берите последний вариант.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:44, 27-01-2010 | #14


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


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

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


Ребята, вы все молодцы!
Всем спасибо!
Очень помогли !

-------
constantant.ru - САЙТЫ ОТ 60К


Отправлено: 13:07, 27-01-2010 | #15


Googler


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

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


вдогонку по теме - случайно наткнулся на утилиту FART (Find And Replace Text), которая кроме прочего может переименовывать файлы... к сожалению, для замены каждого символа потребовалась отдельная команда:
Код: Выделить весь код
fart -f *.pdf "_" "-"
fart -f *.pdf "+" "-"
fart -f *.pdf "&" "-"
fart -f *.pdf "=" "-"
fart -f *.pdf " " "-"

Отправлено: 12:09, 31-01-2010 | #16


Аватара для Devils0411

Ветеран


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

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


Похожая ситуация... Только необходимо заменить символ "\" на "/" в текстовом файле.

-------
Скрипт автоустановки WINDOWSXP; Скрипт мультиустановки ОС


Отправлено: 02:54, 14-08-2010 | #17


Пользователь


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

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


Devils0411,


Код: Выделить весь код
Option Explicit

Dim FSO, TextStream, File, strContents, Document

Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.GetFile("путь_к_файлу\input.txt") ' Исходный файл для обработки
Set TextStream = File.OpenAsTextStream()
Set Document = FSO.CreateTextFile("путь_к_файлу\output.txt") ' Выходной файл
strContents = TextStream.ReadAll()
Document.Write(Replace(strContents,"\","/")) ' Параметры замены
Document.Close

Отправлено: 12:32, 14-08-2010 | #18


Аватара для Devils0411

Ветеран


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

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


deepred, только хотелось бы все же средствами cmd, или cmd + какая-нибудь утилитка для замены символов.

-------
Скрипт автоустановки WINDOWSXP; Скрипт мультиустановки ОС


Отправлено: 13:21, 14-08-2010 | #19


Пользователь


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

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


Devils0411,

Код: Выделить весь код
Echo off
Set "Loctn=F:\change symbol\" & rem расположение  файла
CD %Loctn%
for /f "tokens=* delims=" %%a in (file.txt) do call :replace "%%a"
:loop
IF Exist TMP (TYPE TMP > file.txt && Del TMP) else goto loop
goto :Eof

:replace
Set $TXTin=%~1
Set $TXTout=%$TXTin:\=/%
Echo %$TXTout%  >> TMP

Отправлено: 14:12, 14-08-2010 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Система - [addon] Internet Explorer 8 Rus (с заменой файлов IE6) версия 14.5.3 jameszero Наборы обновлений для Windows XP/2003/Windows 7 955 22-01-2021 22:59
Система - [addon] Internet Explorer 7 Rus (с заменой файлов IE6) версия 14.5.3 jameszero Наборы обновлений для Windows XP/2003/Windows 7 1277 06-02-2015 16:30
CMD/BAT - [решено] Перемещение и удаление файлов по условию и маске VitHAK Скриптовые языки администрирования Windows 14 23-12-2013 08:57
Установка - Помогите с заменой файлов в дистрибутиве AlexThePeacemaker Microsoft Windows 2000/XP 0 12-12-2009 11:42
Разрешение записи файлов по маске Green_Fox Microsoft Windows 2000/XP 5 11-08-2006 12:35




 
Переход