Перейти к публикации
Nightmarish Dream
Silent boy

Клуб креатива

Рекомендованные сообщения

Тут говорили про Total Commander. Недавно увлекся VBS (Visual Basic Scripting Edition - поддержка скриптов на винде). Скрипты, как вы наверно знаете, нужны для автоматизации каких-то несложных действий. Вчера за вечер-ночь накатал функцию для автоматизации групповой переименовки файлов. Этой фичей я раньше пользовался как раз в Total Commander'е. Вообще, я его держу ради 3-х вещей: быстрый поиск файлов, быстрое вкл/выкл скрытых файлов и как раз для переименования групп файлов. Теперь же надобность держать эту скотину в овер20 Мб отпадает). Хоть у меня и стоит сборка с минимум набором возможностей. Скрипты же занимают каких-то 3 Кб и не требуют установки, разве что привязки к винде и присутствие некоторых различий версий Windows. Плюс, можно редактировать по-своим потребностям, вшить в проводник и т.п.

Если есть желание потестить мое творение, то милости просим.

Надо всего лишь создать текстовый документ, сменить расширение .txt на .vbs (например: Групповое переименование файлов.vbs) и вставить в него код:

argsLen=wscript.arguments.length

if argsLen=0 then

msgbox "Перетяните на скрипт файлы для группового переименования."

wscript.quit

end if

a="/и/"

do

a=inputbox("Введите шаблон, согласно которому будут переименованы файлы."+vbcrlf+vbcrlf+_

"Используйте обозначения:"+vbcrlf+vbcrlf+_

"/и/ -- имя файла" +vbcrlf+_

"/С=1/ -- счетчик"+vbcrlf+_

"/ДМГ/ -- дата"+vbcrlf+_

"/чмс/ -- время",,a)

if a="" then wscript.quit

n=1

do

n=instr(n,a,"/")

if n=0 then exit do

nn=instr(n+1,a,"/")

if nn=0 then s=right(a,len(a)-n+1) else s=mid(a,n,nn-n+1)

if nn=0 then e=1:exit do

ss=mid(s,3,1)

select case mid(s,2,1)

case "и","И":if ss<>"/" then e=1: exit do

case "С"

if ss="=" then

if mid(s,4,1)="/" then e=1:exit do

for n=4 to len(s)-1

if instr("0123456789",mid(s,n,1))=0 then e=1:exit do

next

elseif ss<>"/" then

e=1:exit do

end if

case "Д","М","Г"

if ss<>"/" then

for n=3 to len(s)-1

if instr("ДМГ",mid(s,n,1))=0 then e=1:exit do

next

end if

case "ч","м","с"

if ss<>"/" then

for n=3 to len(s)-1

if instr("чмс",mid(s,n,1))=0 then e=1:exit do

next

end if

case else:e=1:exit do

end select

n=nn+1

loop

if e then e=0:msgbox "Неверная команда "+s else exit do

loop

newNamesMsg=1:s="Следущие файлы будут переименованы:"+vbcrlf+vbcrlf

set fso = createobject("scripting.filesystemobject")

do

if newNamesMsg=0 or (newNamesMsg and argsLen<=10) then n=argslen else n=10:lastStr=vbcrlf+"..."

c=-1

for n=0 to n-1

p=wscript.arguments(n)

nn=len(p):ext=""

if instr(p,".") then

do:ss=mid(p,nn,1):ext=ss+ext:nn=nn-1:loop while ss<>"."

end if

f="":while mid(p,nn,1)<>"\":f=mid(p,nn,1)+f:nn=nn-1:wend

p=left(p,nn)

ff=""

for nn=1 to len(a)

ss=mid(a,nn,1)

if ss<>"/" then

ff=ff+ss

else

select case mid(a,nn+1,1)

case "и", "И":ff=ff+f:INCnn=2

case "С"

if mid(a,nn+2,1)<>"=" then

if c=-1 then c=1

INCnn=2

else

nn=nn+3:ss="":while mid(a,nn,1)<>"/":ss=ss+mid(a,nn,1):nn=nn+1:wend

if c=-1 then c=clng(ss)

end if

ff=ff+cstr( c ):c=c+1

case "Д","М","Г"

nn=nn+1:firstSAdded=0

while mid(a,nn,1)<>"/":if firstSAdded then ff=ff+"."

ff=ff+getDT(mid(a,nn,1)):nn=nn+1:if firstSAdded=0 then firstSAdded=1

wend

case "ч","м","с"

nn=nn+1:firstSAdded=0

while mid(a,nn,1)<>"/":if firstSAdded then ff=ff+"-"

ff=ff+getDT(mid(a,nn,1)):nn=nn+1:if firstSAdded=0 then firstSAdded=1

wend

end select

nn=nn+INCnn:INCnn=0

end if

next

if newNamesMsg then

if firstStrAdded then s=s+vbcrlf

if len(f)>20 then f=left(f,10)+"..."+right(f,10)

s=s+f+ext+" -> "+ff+ext

if firstStrAdded=0 then firstStrAdded=1

else

if fso.fileexists(p+ff+ext) then notAllMoved=1 else fso.movefile p+f+ext,p+ff+ext

end if

next

if newNamesMsg then

newNamesMsg=0

if msgbox(s+lastStr,vbokcancel)=2 then exit do

else:exit do

end if

loop

if notAllMoved then msgbox "Не все файлы удалось переименовать из-за схожих имен."

function getDT (arg)

dim n,nn,pos,s

s=fso.getfile(p+f+ext).datelastmodified

s=replace(s,"."," "):s=replace(s,":"," ")+" "

nn=2

select case arg

case "Д"

case "М":n=1

case "Г":n=2:nn=4

case "ч":n=3

case "м":n=4

case "с":n=5

end select

while n>0:n=n-1:pos=instr(pos+1,s," "):wend:pos=pos+1

getDT=mid(s,pos,instr(pos+1,s," ")-pos)

end function

Отпишитесь как работает.)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×