Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Переименование файлов с заменой символов по маске (http://forum.oszone.net/showthread.php?t=164590)

Constantant 25-01-2010 13:43 1329342

Переименование файлов с заменой символов по маске
 
Здравствуйте!
Нужно очень сделать батничек, который переименовывает файлы 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:_=-% вот эта строка заменяет все символы "_" на символ "-", а вот как здесь пристроить регулярное выражение мне не понятно.

Спасибо.

El Sanchez 25-01-2010 20:56 1329736

Вложений: 1
Пример с использованием утилиты sed:
Код:

@echo off
for /f "usebackq tokens=*" %%a in (`dir /b *.pdf`) do call :func "%%~na"
goto :eof

:func
for /f "tokens=*" %%a in ('echo %1^|sed /^"[ _^=+^&]^"/s//-/g^|sed /\^"/s///g') do ren %1.pdf %%a.pdf


Constantant 25-01-2010 22:27 1329809

спасибо большое!
а без sed вообще ни как?

amel27 26-01-2010 09:50 1330090

Цитата:

Цитата Constantant
без sed вообще ни как? »

штатными средствами CMD никак, т.к. заменяемые символы являются метасимволами самого CMD... кроме того, в Windows отсутствуют штатные утилиты по замене текста (тем более через RegExp), так что варианта два:

- использовать сторонние CMD-утилиты типа SED (коих немеренно);
- задействовать в решении скрипты на VBS или PowerShell.

Кстати, еще вариант на SED (из комплекта UnxUtils): :)
Код:

For /F "Delims=" %%i In (
'DIR /B *.pdf^|SED "s/.$//;s/.*/\"\0\"/;h;s/[ _+=&]/-/g;x;G;s/\n/ /"'
) Do REN %%i


Constantant 26-01-2010 10:41 1330120

Цитата:

Цитата amel27
штатными средствами CMD никак »

Я уже смирился с этим :yes:
Цитата:

Цитата amel27
Кстати, еще вариант на SED »

вот только я не пойму как этот Sed применять.. как его устанавливать?
то что в хелпе мне не очень понятно)
пример хотелось бы увидеть)

Большое спасибо за отзывы :)

amel27 26-01-2010 12:31 1330195

Цитата:

Цитата Constantant
Я уже смирился с этим »

тогда немного изврата не будет лишним: ;)
Код:

@Echo Off

For %%Z In (*.pdf) Do For /F "Tokens=1-26 Delims=&=_+ " %%a In ("%%Z") Do (
Set $T="%%a-%%b-%%c-%%d-%%e-%%f-%%g-%%h-%%i-%%j-%%k-%%l-%%m-%%n-%%o-%%p-%%q-%%r-%%s-%%t-%%u-%%v-%%w-%%x-%%y-%%z"
Set $F="%%Z"& CALL :SUB_REN )

Exit /B 0

:SUB_REN
If %$T:~-2,1%==- Set $T=%$T:-"="%& GoTo SUB_REN
REN %$F% %$T%& GoTo :EOF

Цитата:

Цитата Constantant
то что в хелпе мне не очень понятно »

инфы всякой много, хотя бы тут: Просто о sed

Constantant 26-01-2010 12:31 1330196

ни один из вышеприведённых скриптов не работает...
я попытался сделать вот так:
Код:

for %%g in ("C:\kharitonov\My Documents\PDF\*.pdf") do call :s_subroutine "%%~nxg" "%%g"
:s_subroutine
set aaa=%1^|SED "s/.$//;s/.*/\"\0\"/;h;s/[ _+=&]/-/;x;G;s/\n/ /"
ren %2 %aaa%
goto :eof

но всё равно ни чего не выходит...
я 3 дня знаком с шелом... помогите, пожалуйся, ни чего не понимаю.

amel27 26-01-2010 12:34 1330199

Цитата:

Цитата Constantant
ни один из вышеприведённых скриптов не работает »

скрипты для запуска из текущего каталога с *.PDF, т.е. нужно предварить CD или PushD

Constantant 26-01-2010 12:35 1330201

Цитата:

Цитата amel27
тогда немного изврата не будет лишним: »

а вот это реально работает))))

но всё же хотелось бы разобраться с SED...

Цитата:

Цитата amel27
нужно предварить CD или PushD »

чувствую себя идиотом :unsure:

amel27 26-01-2010 12:52 1330220

Цитата:

Цитата Constantant
всё же хотелось бы разобраться с SED »

опечатку исправил, пример команды разбора:
Код:

DIR /B/A-D *.pdf|SED "s/[ _&+=]/-/g"
Цитата:

Цитата Constantant
чувствую себя идиотом »

Код:

CD C:\kharitonov\My Documents\PDF
...

Код:

PUSHD C:\kharitonov\My Documents\PDF
...

справка по команде:
Код:

PUSHD /?

Constantant 26-01-2010 13:01 1330231

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

El Sanchez 26-01-2010 15:25 1330376

Цитата:

Цитата 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
%*


amel27 27-01-2010 05:26 1330998

Цитата:

Цитата 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, решено ?

El Sanchez 27-01-2010 10:44 1331157


Цитата:

Цитата amel27
Но он не позволяет менять "!" »

Так и не требуется ж :)

Цитата:

Цитата amel27
Если не против, немного доработал »

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

Constantant 27-01-2010 13:07 1331293

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

amel27 31-01-2010 12:09 1334825

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

fart -f *.pdf "_" "-"
fart -f *.pdf "+" "-"
fart -f *.pdf "&" "-"
fart -f *.pdf "=" "-"
fart -f *.pdf " " "-"


Devils0411 14-08-2010 02:54 1473373

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

deepred 14-08-2010 12:32 1473502

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


Devils0411 14-08-2010 13:21 1473527

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

deepred 14-08-2010 14:12 1473551

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


Devils0411 18-08-2010 16:44 1476444

А прям в переменной эти символы можно заменить?

zeroua 27-01-2011 03:40 1598051

Нужен простой скрип для переименования *.msi пакета с любым названием в заданное. Все забыл уже и сам нашел простое решение.

ren *.msi newname.msi, думаю и дальше разберусь сам.

mozg777 02-02-2011 07:53 1602582

Народ, есть задача в одних файлах jpeg (*.jpg) заменить _ на ~~
В других после шестого символа вставить ~~
например 4480354941.jpg на 448035~~4941.jpg

El Sanchez 02-02-2011 12:25 1602743

Цитата:

Цитата mozg777
в одних файлах jpeg (*.jpg) заменить _ на ~~ »

mozg777,
Код:

@Echo Off
Set Source=C:\Source

For %%A In ("%Source%\*.jpg") Do Call :_Func "%%~nxA"
GoTo :EoF

:_Func
        Set FileName=%~n1
        Ren "%Source%\%~1" "%FileName:_=~~%%~x1"

Цитата:

Цитата mozg777
В других после шестого символа вставить ~~ »

mozg777,
Код:

@Echo Off
Set Source=C:\Source

For %%A In ("%Source%\*.jpg") Do Call :_Func "%%~nxA"
GoTo :EoF

:_Func
        Set FileName=%~n1
        If Not "%FileName:~5%"=="" Ren "%Source%\%FileName%%~x1" "%FileName:~0,6%~~%FileName:~6%%~x1"


mozg777 03-02-2011 08:59 1603307

Огромное спасибо!
Второй работает на ура!
Первый произвольно в некоторых файлах ставит 4 тильды, поясните плиз как исправить
P.S. Где можно почитать про написание таких скриптов, расшифровку атрибутов

El Sanchez 03-02-2011 10:24 1603358

Цитата:

Цитата mozg777
Первый произвольно в некоторых файлах ставит 4 тильды, поясните плиз как исправить »

mozg777, значит в имени файла встречаются 2 символа подчеркивания подряд

Цитата:

Цитата mozg777
Где можно почитать про написание таких скриптов, расшифровку атрибутов »

Например, Полезные ресурсы по скриптовым языкам администрирования

mozg777 04-02-2011 07:27 1604041

Цитата:

Цитата El Sanchez
значит в имени файла встречаются 2 символа подчеркивания подряд »

El Sanchez, нет это в тех файлах где надо после шестого символа поставить две тильды. я проверял через сьв - некоторые файлы скрипт прогоняет два раза. что если в функцию включить условие типа если стоят две тильды - то ничего не добавлять.

gora 04-02-2011 10:07 1604106

Цитата:

Цитата mozg777
в функцию включить условие типа если стоят две тильды - то ничего не добавлять. »

Попробуйте так:
Код:

:_Func
        Set FileName=%~n1
        Set FN=%FileName:~~=%
        If "%FN%"=="%FileName%"
If Not "%FileName:~5%"=="" Ren "%Source%\%FileName%%~x1" "%FileName:~0,6%~~%FileName:~6%%~x1"


mozg777 04-02-2011 13:38 1604290

явная ошибка, чет не срастается....

El Sanchez 04-02-2011 14:04 1604309

Цитата:

Цитата mozg777
нет это в тех файлах где надо после шестого символа поставить две тильды. я проверял через сьв - некоторые файлы скрипт прогоняет два раза. »

mozg777, это 2 отдельных скрипта с одной лишь командой переименования, никаких повторных прогонов. Просто не надо после отработки одного скрипта применять другой скрипт к уже обработанным файлам.
Я полагаю, что задача у вас такая: заменить символ _ в именах файлов на ~~, если символ _ в имени не встречается, то после шестого символа добавить ~~.
Код:

@Echo Off
Set Source=C:\Source

For %%A In ("%Source%\*.jpg") Do Call :_Func "%%~nxA"
GoTo :EoF

:_Func
        Set FileName=%~n1
        If "%FileName:_=%"=="%FileName%" (
                If Not "%FileName:~5%"=="" Ren "%Source%\%FileName%%~x1" "%FileName:~0,6%~~%FileName:~6%%~x1"
        ) Else (
                Ren "%Source%\%~1" "%FileName:_=~~%%~x1"
        )

P.S. gora, хорошее решение поиска определенного символа в имени файла. И find/findstr не нужен.

gora 04-02-2011 14:11 1604317

Цитата:

Цитата El Sanchez
хорошее решение поиска определенного символа в имени файла »

К сожалению на тильде он не сработал :( Спец. символ однако. А вообще применение спец. символов в именах, а тем более их умышленное туда добавление - поиск приключений на свою "нижнюю голову". ИМХО.


mozg777, исправил, попробуйте так.
Код:

:_Func
        Set FileName=%~n1
        If Not "%FileName:~5%"=="" If Not "%FileName:~6,2%"=="~~" Ren "%Source%\%FileName%%~x1" "%FileName:~0,6%~~%FileName:~6%%~x1"


amel27 04-02-2011 15:56 1604425

Цитата:

Цитата gora
К сожалению на тильде он не сработал »

в данном случае можно обойти:
Код:

Set "FN=%FileName:*~~=%"

mozg777 07-02-2011 08:04 1606495

2gora: Спасибо!, Работает!
2 El Sanchez - Эффект повторения в некоторых файлах остался

mozg777 10-02-2011 07:17 1609032

Комрады! Выручате!
Получаемый отчет вручную не импортируется в программу, необходимо его привести к другому виду

получаю файл 7420_Fil_AngANGARSK_D2011-01-21.csv (обычный текстовой)

внутри

"branchno","store","country","period","hour","zone","customers - incoming","customers - outgoing"
"AngANGARSK","203 Ecco-geox","Russian Federation","2011-01-21","09:00","Floor 1, main1","7","3"
"AngANGARSK","203 Ecco-geox","Russian Federation","2011-01-21","11:00","Floor 1, main1","","1"
"AngANGARSK","203 Ecco-geox","Russian Federation","2011-01-21","12:00","Floor 1, main1","9","10"
"AngANGARSK","203 Ecco-geox","Russian Federation","2011-01-21","13:00","Floor 1, main1","10","7"
"AngANGARSK","203 Ecco-geox","Russian Federation","2011-01-21","14:00","Floor 1, main1","12","10"
"AngANGARSK","203 Ecco-geox","Russian Federation","2011-01-21","15:00","Floor 1, main1","9","14"
"AngANGARSK","203 Ecco-geox","Russian Federation","2011-01-21","16:00","Floor 1, main1","19","11"
"AngANGARSK","203 Ecco-geox","Russian Federation","2011-01-21","17:00","Floor 1, main1","16","16"
"AngANGARSK","203 Ecco-geox","Russian Federation","2011-01-21","18:00","Floor 1, main1","7","10"
"AngANGARSK","203 Ecco-geox","Russian Federation","2011-01-21","19:00","Floor 1, main1","15","11"
"AngANGARSK","203 Ecco-geox","Russian Federation","2011-01-21","20:00","Floor 1, main1","10","6"


нужно привести к виду

storeid, shopname, branchno, date, location, time, in-coming, out-going
7420,203 Ecco-geox,AngANGARSK,2011-01-21,Main1,09:00,7,3
7420,203 Ecco-geox,AngANGARSK,2011-01-21,Main1,11:00,0,1
7420,203 Ecco-geox,AngANGARSK,2011-01-21,Main1,12:00,9,10
7420,203 Ecco-geox,AngANGARSK,2011-01-21,Main1,13:00,10,7
7420,203 Ecco-geox,AngANGARSK,2011-01-21,Main1,14:00,12,10
7420,203 Ecco-geox,AngANGARSK,2011-01-21,Main1,15:00,9,14
7420,203 Ecco-geox,AngANGARSK,2011-01-21,Main1,16:00,19,11
7420,203 Ecco-geox,AngANGARSK,2011-01-21,Main1,17:00,16,16
7420,203 Ecco-geox,AngANGARSK,2011-01-21,Main1,18:00,7,10
7420,203 Ecco-geox,AngANGARSK,2011-01-21,Main1,19:00,15,11
7420,203 Ecco-geox,AngANGARSK,2011-01-21,Main1,20:00,10,6

То есть первую строку заменяем полностью, в остальных первый параметр берем из имени файла, удаляем все кавычки, остальное как душе угодно. Хочется универсальности, так как такого вида пять файлов.

SendMessage 10-02-2011 10:53 1609130

Боюсь, средствами cmd универсальности добиться тяжело. По крайней мере, я не вижу приемлимого пути. Но конкретную задачу решить просто:
Код:

@echo off

setlocal enabledelayedexpansion

set "FileName=7420_Fil_AngANGARSK_D2011-01-21.csv"

echo storeid,shopname,branchno,date,location,time,in-coming,out-going>%FileName%_
for /f "skip=1 tokens=1-2,4-5,7-9 delims=," %%a in (%FileName%) do (
  set "pre=%FileName:~0,4%,%%~b,%%~a,%%~c,%%e,%%~d,%%~f,%%~g"
  set "pre=!pre:, =,!" & set "pre=!pre:"=!"
  echo !pre:,,=,0,!>>%FileName%_
)
ren %FileName% %FileName:~0,-4%.bak
ren %FileName%_ %FileName%


amel27 10-02-2011 13:42 1609277

Цитата:

Цитата mozg777
Хочется универсальности »

вариант на AWK:
Код:

@echo off

set $f=7420_Fil_AngANGARSK_D2011-01-21.csv
set $t=%TEMP%\%~n0.tmp

>"%$t%" echo storeid,shopname,branchno,date,location,time,in-coming,out-going
<"%$f%" >>"%$t%" awk -v FS=\",\" -v _=, ^
 "NR>1{$0=substr($0,2,length()-2);sub(/.*, */,\"\",$6);print \"%$f:~,4%\"_$2_$1_$4_$6_$5_$7_$8}"
copy "%$t%" "%$f%">nul && del "%$t%"


mozg777 11-02-2011 12:55 1610181

универсальность в смысле имя файла может быть например 9810_Fil_ClarksFort_D2011-01-22.csv хотя здесь можно добиться универсальности только относительно даты в файле. для каждого магазина (Fil_ClarksFort) нужен свой батник.

о! Самый идеальный вариант - в цикле перебирать имена файлов в папке с расширением csv и передавать их в переменную FileName

Второй скрипт работает неправильно. включается только первая стройка и все.

mazariki 02-09-2011 17:23 1744835

Помогите пожалуйста нужно чтобы в файлах (*.*) менялся символ ~ например на _

нашел тут пример:

@Echo Off
Set Source=C:\test\sed

For %%A In ("%Source%\*.*") Do Call :_Func "%%~nxA"
GoTo :EoF

:_Func
Set FileName=%~n1
Ren "%Source%\%~1" "%FileName:_=~~%%~x1"

он заменяет _ на ~~ но когда меняю на

Ren "%Source%\%~1" "%FileName:~=_%%~x1"

то не работает(

SendMessage 03-09-2011 04:58 1745120

Цитата:

Цитата mazariki
Помогите пожалуйста нужно чтобы в файлах (*.*) менялся символ ~ например на _ »

Да, с тильдой есть проблемы. Мне так и не удалось экранировать. Может кто другой знает.
Решил проблему так:
Код:

@echo off

set "Source=z:\folder"

for %%i in (%Source%\*.*) do call:ReplaceAndRename "%%i"
goto:eof

:ReplaceAndRename
set "name=\%~nx1"
:loop
echo %name% | find "~" >nul && (for /f "tokens=1* delims=~" %%a in ("%name%") do set "name=%%a_%%b" & goto loop)
ren %1 "%name:~1%"

Слэш поставлен перед именем файла (set "name=\%~nx1") для корректной работы в том случае, если имя файла начинается с тильды.

PS. Пример дан с заменой тильды и в расширении. Если это не нужно - чуть-чуть надо поменять.

surgutfred 29-09-2014 23:41 2408602

Помогите с такой задачей:
есть куча файлов определенного формата в названии
???#??????#????.txt
????#??????#????.txt

Нужно символы между решетками заменить на текущее число, т.е. к примеру 0930:
????#DD0930#????.txt, поскольку перед первой решеткой кол-во символов варируется, я не могу просто отсчитать от начала кол-во символов. Между решетками кол-во символов постоянно.

Iska 30-09-2014 05:15 2408651

WSH:
читать дальше »
Код:

Option Explicit

Dim strSourceFolder

Dim objFSO
Dim objFile

Dim strFormatCurrDate


strSourceFolder = "E:\Песочница\0399"

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strSourceFolder) Then
        strFormatCurrDate = Right("00" & CStr(Month(Date())), 2) & Right("00" & CStr(Day(Date())), 2)
       
        With WScript.CreateObject("VBScript.RegExp")
                .IgnoreCase = True
                .Pattern    = "(.*#)(.*)(#.*\.txt)"
               
                For Each objFile In objFSO.GetFolder(strSourceFolder).Files
                        If .Test(objFile.Name) Then
                                objFile.Name = Replace(.Replace(objFile.Name, "$1" & ":" & "$3"), ":", strFormatCurrDate)
                        End If
                Next
        End With
Else
        WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
        WScript.Quit 1
End If

Set objFSO = Nothing

WScript.Quit 0


PoSH:
читать дальше »
Код:

$sSourceFolder = "E:\Песочница\0399"
$sMask        = "(.*#)(.*)(#.*\.txt)"

if(Test-Path -Path $sSourceFolder -PathType Container) {
    $sFormatCurrDate = Get-Date -Format "MMdd"
   
    Get-ChildItem -Path $sSourceFolder |`
        ForEach-Object -Process {
            if(!$_.PSIsContainer) {
                if($_.Name -match $sMask) {
                    Rename-Item -Path $_.FullName -NewName ($_.Name -replace $sMask, '$1:$3').replace(":", $sFormatCurrDate)
                }
            }
        }
} else {
    Write-Host "Can't find source folder [$sSourceFolder]." -ForegroundColor Red
}


CMD:
читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=E:\Песочница\0399

if exist "%sSourceFolder%\." (
        call :GetFormatDateTime
       
        pushd "%sSourceFolder%"
       
        for /f "usebackq delims=" %%i in (
                `2^>nul dir /b /a:-d "%sSourceFolder%\*.*" ^| findstr.exe ".*#.*#.*\.txt"`
        ) do (
                set sOldName=%%~i
                call :GetNewName "!sOldName:#=" "!"
                ren "%%~i" "!NewName!"
        )
       
        popd
) else (
        echo Can't find source folder [%sSourceFolder%].
        exit /b 1
)

endlocal
exit /b 0
rem ==========================================================================

rem ==========================================================================
:GetNewName
        setlocal enableextensions enabledelayedexpansion
       
        set sProcName=%~0
       
        endlocal & set %sProcName:~4%=%~1#%FormatDateTime%#%~3
        exit /b 0
rem ==========================================================================

rem ==========================================================================
rem Функция GetFormatDateTime()
rem
rem Серый форум (http://forum.script-coding.com)
rem ==========================================================================
:GetFormatDateTime
        setlocal enableextensions enabledelayedexpansion
       
        set sProcName=%~0
        for /f "delims=." %%i in ('wmic.exe OS get LocalDateTime ^| find "."') do set sDateTime=%%i
       
        endlocal & set %sProcName:~4%=%sDateTime:~4,4%
        exit /b 0
rem ==========================================================================


DonQuixote 29-03-2016 03:40 2620812

доброй ночи..
мне тоже надо по маске символы переименовать но выходит как то криво.
вот:

имеються 2 или больше файла
appliedenergistics2-rv3-beta-5.jar
appliedenergistics2-rv2-stable-10.jar
я их переименовываю так
rename "%BINDIR%appliedenergistics2-rv3-*.jar" "2_6_appliedenergistics2-rv3-*.jar"
rename "%BINDIR%appliedenergistics2-rv2-*.jar" "2_6_appliedenergistics2-rv2-*.jar"
а получаеться это
2_6_appliedenergistics2-rv2-le-10.jar
2_6_appliedenergistics2-rv3--5.jar
куда то теряются 4 символа полсе знака -
должно быть так
2_6_appliedenergistics2-rv2-stable-10.jar
2_6_appliedenergistics2-rv3-beta-5.jar
%BINDIR% путь к паке где лежит батник и файлы
в идеале мне надо что бы bat находил фйал по шаблону "appliedenergistics2*.jar" или такому "GTTweaker-1*.jar и
добавлял в начале имени например 2_6_ и любое другое по моему выбору а имя целеком не трогал
но заметил что символы между - . и первой точкой в имени исчезают
например как тут 1_0_galacticgreg-0.7.jar
rename "%BINDIR%galacticgreg-0*.jar" "1_0_galacticgreg-0*.jar"
0 теряется по этому я его дописал выше -0
сечас батник такова вида
@echo on
SET BINDIR=%~dp0
CD /D "%BINDIR%"
set poi1=jar*
set poi2=zip*
set poi3=litemod*
set Rnam=INFO_
rename "%BINDIR%CraftGuide-1*.jar" "%Rnam%GUI_S_CraftGuide-1*.jar"
rename "%BINDIR%LLOverlayReloaded-1*.jar" "%Rnam%GUI_LLOverlayReloaded-1*.jar"
rename "%BINDIR%IC2.Nei.Plugin.Version*.jar" "%Rnam%GUI_3_S_IC2.Nei.Plugin.Version*.jar"

смог сам найти решение
Код:

@echo on
SET BINDIR=%~dp0
CD /D "%BINDIR%"
set poi1=jar*
set poi2=zip*
set poi3=litemod*
rem RM
for /f "tokens=*" %%a in ('dir /b "%BINDIR%ElectriCraft 1*.jar"') do ren "%BINDIR%%%a" "%Rnam%2_RM_%%a"
for /f "tokens=*" %%a in ('dir /b "%BINDIR%ReactorCraft 1*.jar"') do ren "%BINDIR%%%a" "%Rnam%2_RM_%%a"
for /f "tokens=*" %%a in ('dir /b "%BINDIR%RotaryCraft 1*.jar"') do ren "%BINDIR%%%a" "%Rnam%2_RM_%%a"
for /f "tokens=*" %%a in ('dir /b "%BINDIR%ChromatiCraft 1*.jar"') do ren "%BINDIR%%%a" "%Rnam%3_RM_%%a"
for /f "tokens=*" %%a in ('dir /b "%BINDIR%ExpandedRedstone 1*.jar"') do ren "%BINDIR%%%a" "%Rnam%8_RM_%%a"
for /f "tokens=*" %%a in ('dir /b "%BINDIR%UsefulTNT 1*.jar"') do ren "%BINDIR%%%a" "%Rnam%8_RM_%%a"
for /f "tokens=*" %%a in ('dir /b "%BINDIR%DragonAPI 1*.jar"') do ren "%BINDIR%%%a" "%Rnam%0EXT_LIB_RM_%%a"
for /f "tokens=*" %%a in ('dir /b "%BINDIR%LegacyCraft 1*.jar"') do ren "%BINDIR%%%a" "%Rnam%0_RM_%%a"
for /f "tokens=*" %%a in ('dir /b "%BINDIR%CaveControl 1*.jar"') do ren "%BINDIR%%%a" "%Rnam%GEN_RM_%%a"
for /f "tokens=*" %%a in ('dir /b "%BINDIR%GeoStrata 1*.jar"') do ren "%BINDIR%%%a" "%Rnam%GEN_RM_%%a"
for /f "tokens=*" %%a in ('dir /b "%BINDIR%TerritoryZone 1*.jar"') do ren "%BINDIR%%%a" "%Rnam%GUI_S_RM_%%a"
for /f "tokens=*" %%a in ('dir /b "%BINDIR%CritterPet 1*.jar"') do ren "%BINDIR%%%a" "%Rnam%MOB_RM_%%a"
for /f "tokens=*" %%a in ('dir /b "%BINDIR%VoidMonster 1*.jar"') do ren "%BINDIR%%%a" "%Rnam%MOB_RM_%%a"
for /f "tokens=*" %%a in ('dir /b "%BINDIR%CondensedOres 1*.jar"') do ren "%BINDIR%%%a" "%Rnam%RM_%%a"
for /f "tokens=*" %%a in ('dir /b "%BINDIR%MeteorCraft 1*.jar"') do ren "%BINDIR%%%a" "%Rnam%RM_%%a"
set Rnam=INFO_
for /f "tokens=*" %%a in ('dir /b "%BINDIR%CraftGuide-1*.jar"') do ren "%BINDIR%%%a" "%Rnam%GUI_S_%%a"
for /f "tokens=*" %%a in ('dir /b "%BINDIR%LLOverlayReloaded-1*.jar"') do ren "%BINDIR%%%a" "%Rnam%GUI_%%a"



Время: 03:34.

Время: 03:34.
© OSzone.net 2001-