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

Аватара пользователя
amel27

Re: CMD/BAT - [решено] Переименование файлов с заменой символов по маске

Сообщение amel27 »

Цитата Constantant:



а без sed вообще ни как?
CMD/BAT - [решено] Переименование файлов с заменой символов по маске




Еще один изврат (сценарий обязательно сохранить в кодировке 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
%*
Аватара пользователя
El Sanchez

Re: CMD/BAT - [решено] Переименование файлов с заменой символов по маске

Сообщение El Sanchez »

Цитата El Sanchez:



Еще один изврат
CMD/BAT - [решено] Переименование файлов с заменой символов по маске




Класс!.. Но он не позволяет менять "!"... Если не против, немного доработал:



Код:

Код: Выделить всё

@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,
решено
?
Аватара пользователя
amel27

Re: CMD/BAT - [решено] Переименование файлов с заменой символов по маске

Сообщение amel27 »

Цитата amel27:



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




Так и не требуется ж Изображение




Цитата amel27:



Если не против, немного доработал
CMD/BAT - [решено] Переименование файлов с заменой символов по маске




amel27,

Вещь! И не надо подстановку делать, простое посимвольное сравнение.

Кстати, сравнил время выполнения моего сценария с вашим. Сгенерировал 1000 текстовых файлов с уникальными именами (%random%ы, разделенные этими 5 символами) и включил секундомер. Мой сценарий выполнился в среднем за 1:51.8 мин., а ваш за 1:28.2 мин., так что Constantant, берите последний вариант.
Аватара пользователя
El Sanchez

Re: CMD/BAT - [решено] Переименование файлов с заменой символов по маске

Сообщение El Sanchez »

Ребята, вы все молодцы!

Всем спасибо!

Очень помогли Изображение Изображение !
Аватара пользователя
Constantant

Re: CMD/BAT - [решено] Переименование файлов с заменой символов по маске

Сообщение Constantant »

Ребята, вы все молодцы!

Всем спасибо!

Очень помогли Изображение Изображение !
Аватара пользователя
Constantant

Re: CMD/BAT - [решено] Переименование файлов с заменой символов по маске

Сообщение Constantant »

вдогонку по теме - случайно наткнулся на утилиту
FART
(Find And Replace Text), которая кроме прочего может переименовывать файлы... к сожалению, для замены каждого символа потребовалась отдельная команда:



Код:

Код: Выделить всё

fart -f *.pdf "_" "-"
fart -f *.pdf "+" "-"
fart -f *.pdf "&" "-"
fart -f *.pdf "=" "-"
fart -f *.pdf " " "-"
Аватара пользователя
deepred

Re: CMD/BAT - [решено] Переименование файлов с заменой символов по маске

Сообщение deepred »

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

Re: CMD/BAT - [решено] Переименование файлов с заменой символов по маске

Сообщение deepred »

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
Аватара пользователя
deepred

Re: CMD/BAT - [решено] Переименование файлов с заменой символов по маске

Сообщение deepred »

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

Вернуться в «Скриптовые языки администрирования Windows»