Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/56: Рейтинг темы: голосов - 56, средняя оценка - 4.57
9 / 9 / 0
Регистрация: 14.10.2014
Сообщений: 69
VBS

VBS-скрипт и Total Commander

19.12.2014, 11:50. Показов 12006. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Возникла необходимость соединить в своей работе Total Commander 8.51а и VBS. Для соединения их между собой использую плагин TCWSHelp.exe.
Задача заключается в следующем. Пользователь открывает TC, переходит в директорию, сортирует там файлы по необходимым ему там признакам. Выделяет необходимые файлы. Затем нажимает в панели управления TC заранее, заботливо вынесенный, ярлык на vbs скрипт.
VBS начинает работу. Перехватывает названия выделенных файлов, запускает winrar, происходит архивация данных файлов, затем все складывается на SMB шару в ЛВС.

С чем я столкнулся при написании:
1 - Как правильно перехватить названия выделенных файлов?
2 - Что сделать такого, чтобы &computername& правильно стыковался с именем архива?

Собственно для чего все это делается. Возникла необходимость написать систему архивирования/резервного копирования и сохранения данных пользователей. Понимаю, что есть много интересных и крутых пакетов, но нам нужна ручная система. Почему? Пользователи работают с очень специфическими программными пакетами и архивировать результаты надо руками.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Option Explicit
Dim List, Cnt, Buf, CurDir 
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
 
' ***********************************************************
Dim TCS
   Set TCS = CreateObject("TCScript.Helper")
   
   TCS.SendCommand "cm_CopyFullNamesToClip"
CurDir = TCS.GetSrcPath 
TCS.SendCommand "cm_CopyFullNamesToClip", True 
MsgBox TCS.GetTextFromClip 
List = Split(TCS.GetTextFromClip,vbNewLine) 
MsgBox List(2)
MsgBox List(1)
MsgBox List(0)
 For Cnt=LBound(List) To UBound(List) 
   If Cnt Mod 2 = 1 Then 
  
      Buf = Buf & Mid(List(Cnt), Len(CurDir) +2) & vbNewLine 
   End If 
 Next 
 
   Dim objArgs, I
Set objArgs = WScript.Arguments 
'Вывод всех аргументов (как пример работы с ними) 
For I = 0 to objArgs.Count - 1 
    WScript.Echo objArgs(I) 
 Next 
' ***********************************************************
 
'************************************************************ 
'забираем имя ПК и кладем его в имя архива
'************************************************************
Set wshShell = WScript.CreateObject( "WScript.Shell" )
Dim strComputerName
strComputerName = wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )
WScript.Echo "Computer Name: " & strComputerName
 
 
Dim WinRarPlace, WinRarParameters, WinRarDirTO
WinRarPlace = "c:\progra~1\winrar\winrar.exe"
WinRarParameters = "a -scoglc -s -r -rr10p -dh -ed -m3 -ag"&strComputerName&"_DD-WW-MMM-YYYY_HH-MM-SS"
'WinRarDirTO = "\\ARM7\temp\TO\"
WinRarDirTO = "C:\temp\TO-TEST\"
'WinRarArhivDate = "-ag+DD-WW-MMM-YYYY_HH-MM-SS%computername%"
WshShell.Run ( "" & WinRarPlace & " " & WinRarParameters & " " & WinRarDirTO & " " & file & "" )
 
'Set TCS = Nothing
 WScript.Quit
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.12.2014, 11:50
Ответы с готовыми решениями:

Double Commander вполне заменит Total Commander?
В виндусе (ворде) документ, сохранённый в формате HTML готов к отправке на сайт. А как в убунте? Пробный текст на убунте, сохранённый в ...

TOTAL COMMANDER 8.01
Люди! Дайте серийник! Или кейген! Или кряк!:scratch:

Total Commander
Помогите ответить на вопросы: 1. Перечислите возможности группового переименования. 2. Перечислите возможности...

22
251 / 239 / 16
Регистрация: 31.12.2009
Сообщений: 324
19.12.2014, 14:52
Цитата Сообщение от inzaim Посмотреть сообщение
С чем я столкнулся при написании:
1 - Как правильно перехватить названия выделенных файлов?
2 - Что сделать такого, чтобы &computername& правильно стыковался с именем архива?
inzaim, по вопросу о перехвате названий выделенных файлов,
видимо, надо читать хелп/доку на плагин к "тоталу"
а еще лучше пользоваться штатными средствами -
"проводником" виндовс, и проблем меньше, и документации больше


А как прилепить &computername& к имени винрар-архива, то тут варианты:
1. "закатать" в архив с любым именем (pre-name.rar), а после окончания архивирования
переименовать как нибудь так:

Visual Basic
1
2
3
strNewName = strComputerName & Now & ".rar"
objFile = objFS.GetFile("pre-name.rar")
objFile.Move(strComputerName & Now)
при этом в построении strNewName ваша фантазия шаблонами винрара не ограничивается

2. попытаться все-таки воткнуть &computername& в параметры винрара - т.е.
сравнив эти две строки:

WinRarParameters = "a -scoglc -s -r -rr10p -dh -ed -m3 -ag"&strComputerName&"_DD-WW-MMM-YYYY_HH-MM-SS"
WinRarArhivDate = "-ag+DD-WW-MMM-YYYY_HH-MM-SS%computername%"


сделать из них третью, например так:

strParam-pam-pam = "a -scoglc -s -r -rr10p -dh -ed -m3 -ag+" & strComputerName & "_DD-WW-MMM-YYYY_HH-MM-SS"

(у вас во второй строке есть плюс после -ag, а в первой - нет) но проверьте еще,
может и третья строка тоже не сработает (пробелы, там в strComputerName или еще што...)


А по "тоталу" может еще кто подскажет, кто "в теме" - надейтесь на лучшее!
1
102 / 60 / 15
Регистрация: 29.01.2014
Сообщений: 119
19.12.2014, 15:12
Цитата Сообщение от buggydancer Посмотреть сообщение
strParam-pam-pam = "a -scoglc -s -r -rr10p -dh -ed -m3 -ag+" & strComputerName & "_DD-WW-MMM-YYYY_HH-MM-SS"
может как-то так?
Visual Basic
1
strParam = "a -scoglc -s -r -rr10p -dh -ed -m3 -ag "+strComputerName+"_DD-WW-MMM-YYYY_HH-MM-SS"
1
9 / 9 / 0
Регистрация: 14.10.2014
Сообщений: 69
19.12.2014, 15:37  [ТС]
С вытягиванием имен из тотала начало получаться. Вопрос снимается.

Остается пока текущий вопрос с тем, что вместо имени ПК в название кладется белиберда или имя ПК. Даже если я просто кидаю туда фиксированное значение некоторые буквы он подменяет на что ему угодно. К примеру букву А меняет на цифру 4.
Насчет плюсов можете не переживать, они даже в документации к винрару идут в качестве примера. Не обращайте внимание.
0
102 / 60 / 15
Регистрация: 29.01.2014
Сообщений: 119
19.12.2014, 16:04
inzaim, пример:
Миниатюры
VBS-скрипт и Total Commander   VBS-скрипт и Total Commander  
1
9 / 9 / 0
Регистрация: 14.10.2014
Сообщений: 69
19.12.2014, 16:11  [ТС]
К сожалению выдает ошибку. Строка 107 символ 1.

Не кладет он %computername%
0
102 / 60 / 15
Регистрация: 29.01.2014
Сообщений: 119
19.12.2014, 16:23
Visual Basic
1
strParam = "a -scoglc -s -r -rr10p -dh -ed -m3 -agDD-WW-MMM-YYYY_HH-MM-SS "+strComputerName+"_"
а так?
1
9 / 9 / 0
Регистрация: 14.10.2014
Сообщений: 69
19.12.2014, 16:28  [ТС]
Из командной строки работает, да. Из скрипта частично, но меняет буквы )))

Добавлено через 3 минуты
Цитата Сообщение от loban_ser Посмотреть сообщение
Visual Basic
1
strParam = "a -scoglc -s -r -rr10p -dh -ed -m3 -agDD-WW-MMM-YYYY_HH-MM-SS "+strComputerName+"_"
а так?
loban_ser

Не срабатывает.

Попробуй весь целиком запустить у себя.

Visual Basic
1
2
3
4
5
Dim WinRarPlace, WinRarParameters, WinRarDirTO, strParam
WinRarPlace = "c:\progra~1\winrar\winrar.exe"
WinRarArhivDate = "-agDD-WW-MMM-YYYY_HH-MM-SS"
WinRarParameters = "strParam = "a -scoglc -s -r -rr10p -dh -ed -m3 -agDD-WW-MMM-YYYY_HH-MM-SS "+strComputerName+"_""
WshShell.Run ( "" & WinRarPlace & " " & WinRarParameters & " " & WinRarDirTO & " " & file & "" )
0
102 / 60 / 15
Регистрация: 29.01.2014
Сообщений: 119
19.12.2014, 16:38
А у мя работает
Visual Basic
1
2
3
4
5
6
7
WinRarPlace = "c:\progra~1\winrar\rar.exe"
WinRarDirTO = "D:\"
file = "Akelpad.exe"
Set wshShell = WScript.CreateObject( "WScript.Shell" )
strComputerName = wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )
WinRarParameters = "a -scoglc -s -r -rr10p -dh -ed -m3 -agDD-WW-MMM-YYYY_HH-MM-SS "+strComputerName+"_"
WshShell.Run ( "" & WinRarPlace & " " & WinRarParameters & " " & WinRarDirTO & file &"" )
1
251 / 239 / 16
Регистрация: 31.12.2009
Сообщений: 324
19.12.2014, 18:58
inzaim , если в нижеприведенном варианте MsgBox выводит ожидаемую строку
буквы не меняет, то попробуйте, может сохранить ваш скрипт как ANSI а не UNICODE
Может это винрар "косячит"?

Visual Basic
1
2
3
4
5
6
7
8
WinRarPlace = "c:\progra~1\winrar\rar.exe"
WinRarDirTO = "D:\"
file = "Akelpad.exe"
Set wshShell = WScript.CreateObject( "WScript.Shell" )
strComputerName = wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )
WinRarParameters = "a -scoglc -s -r -rr10p -dh -ed -m3 -agDD-WW-MMM-YYYY_HH-MM-SS "+strComputerName+"_"
MsgBox(WinRarParameters)
' WshShell.Run ( "" & WinRarPlace & " " & WinRarParameters & " " & WinRarDirTO & file &"" )
или может у вас strComputerName на кириллице?
1
102 / 60 / 15
Регистрация: 29.01.2014
Сообщений: 119
19.12.2014, 19:10
buggydancer, да нет, не в этом дело.
да и весь скрипт не видно.
вообщем сравните строки
Visual Basic
1
WshShell.Run ( "" & WinRarPlace & " " & WinRarParameters & " " & WinRarDirTO & " " & file & "" )
и
Visual Basic
1
WshShell.Run ( "" & WinRarPlace & " " & WinRarParameters & " " & WinRarDirTO & file & "" )
2
251 / 239 / 16
Регистрация: 31.12.2009
Сообщений: 324
19.12.2014, 19:51
Цитата Сообщение от loban_ser Посмотреть сообщение
buggydancer, да нет, не в этом дело.
да и весь скрипт не видно.
вообщем сравните строки
Visual Basic
1
WshShell.Run ( "" & WinRarPlace & " " & WinRarParameters & " " & WinRarDirTO & " " & file & "" )
и
Visual Basic
1
WshShell.Run ( "" & WinRarPlace & " " & WinRarParameters & " " & WinRarDirTO & file & "" )
понятно, что в сравниваемых строках пропущен пробел перед последним параметром,
но мне почему-то кажется, что если:

Цитата Сообщение от inzaim Посмотреть сообщение
...некоторые буквы он подменяет на что ему угодно. К примеру букву А меняет на цифру 4...
то из документации на винрар версия 3.30:
Code
    -ag[формат]
            Добавить к имени архива текущие дату и время
 
            Этот ключ добавляет к имени архива дату и время создания
            архива. Полезно при регулярном создании резервных копий.
 
            По умолчанию принимается формат "YYYYMMDDHHMMSS", который можно
            переопределить с помощью параметра 'формат' этого ключа.
            Допускается использовать следующие символы:
 
              Y    год
              M    месяц
              MMM  месяц в виде строки (Jan, Feb и т.д.)
              W    порядковый номер недели (неделя начинается с понедельника)
              A    номер дня недели (понедельник - 1, воскресенье - 7)
              D    день месяца
              E    номер дня в году
              H    часы
              M    минуты (обрабатывается как минуты, если стоит после часов)
              S    секунды
              N    номер архива (WinRAR ищет уже существующий архив со
                   сгенерированным именем, и если таковой обнаруживается,
                   то увеличивает номер архива, чтобы сгенерировать
                   уникальное имя)
 
            Если строка формата начинается с символа '+', то положения
            строки даты и базового имени архива меняются местами, т.е. дата
            будет предшествовать имени архива.
 
            Все остальные символы добавляются к имени архива без изменений.
соответственно "скормить" винрару параметр -ag "+strComputerName+"_DD-WW-MMM-YYYY_HH-MM-SS"
без изменений получится только если в strComputerName нет вышеперечисленных спецсимволов,
выходит, что вставлять strComputerName в имя файла надо после архивации, обычным переименованием
1
102 / 60 / 15
Регистрация: 29.01.2014
Сообщений: 119
19.12.2014, 21:22
buggydancer, немного не то, нужно указывать имя будущего ирхива, что соответственно мы и делаем задавая его в параметрах, можно и не указывать - тогда имя ахива будет соответствовать архивированному файлу, а нам нужно добавить имя комп. (так или нет?)
WinRarParameters = "a -scoglc -s -r -rr10p -dh -ed -m3 -agDD-WW-MMM-YYYY_HH-MM-SS "+strComputerName+"_"
и вот к нему добавится дата
и не пропущен пробел, а он там не нужен.

Пример:
Visual Basic
1
2
3
4
5
6
7
8
WinRarPlace = "c:\progra~1\winrar\rar.exe"
WinRarDirTO = "D:\"
file = "Akelpad.exe"
CreateObject( "WScript.Shell" )
'strComputerName = wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )
strComputerName = "Пример"
WinRarParameters = "a -scoglc -s -r -rr10p -dh -ed -m3 -agDD-WW-MMM-YYYY_HH-MM-SS "+strComputerName+"_"
WshShell.Run WinRarPlace & " " & WinRarParameters & " " & WinRarDirTO & file, 0
Миниатюры
VBS-скрипт и Total Commander  
2
251 / 239 / 16
Регистрация: 31.12.2009
Сообщений: 324
19.12.2014, 21:29
Цитата Сообщение от loban_ser Посмотреть сообщение
...и не пропущен пробел, а он там не нужен.
Согласен полностью:
1
9 / 9 / 0
Регистрация: 14.10.2014
Сообщений: 69
23.12.2014, 12:58  [ТС]
Спасибо всем за участие.
К сожалению вписать имя ПК в имя архива не удалось. Переименовывать не хотелось, поэтому я пошел немного другим путем. Добавил в описание самого архива необходимую мне информацию.
Внимание! Это не является финальным вариантом и поэтому работает "как есть".
Вот как все это работает.

Запускаем файл run.wsf
XML
1
2
3
4
<job>
    <script language="VBScript" src="start3.vbs" />
    <script language="VBScript" src="SendMail.vbs" />
</job>
Вызывается первым start3.vbs
Вот его содержимое:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
Option Explicit
Dim List, Cnt, Buf, CurDir 
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
 
' ***********************************************************
' BrowseForFolder_files.vbs
' Создание диалогового окна для выбор файла
' ***********************************************************
' Флаги.
Const BIF_returnonlyfsdirs       = &H0001
Const BIF_dontgobelowdomain      = &H0002
Const BIF_statustext             = &H0004
Const BIF_returnfsancestors      = &H0008
Const BIF_editbox                = &H0010
Const BIF_validate               = &H0020
Const BIF_browseforcomputer      = &H1000
Const BIF_browseforprinter       = &H2000
Const BIF_browseincludefiles     = &H4000
Dim file
file = BrowseForFoldr("Выберите файл или папку", BIF_returnonlyfsdirs + BIF_browseincludefiles, "")
If file = "-5" Then
WScript.Echo "Выбран файл в корневой папке"
Else
If file = "-1" Then
WScript.Echo "Объект не выбран"
Else
WScript.Echo "Объект: ", file
End If
End If
 
' Получение полного пути к объекту
Function BrowseForFoldr(title, flag, dir)
On Error Resume Next
Dim oShell, oItem, tmp
Set oShell = WScript.CreateObject("Shell.Application")
' Взывать диалоговое окно Browse For Folder.
Set oItem = oShell.BrowseForFolder(&H0, title, flag, dir)
If Err.Number <> 0 Then
If Err.Number = 5 Then
BrowseForFoldr="-5"
Err.Clear
Set oShell = Nothing
Set oItem = Nothing
Exit Function
End If
End If
' Теперь попытаемся получить полный путь.
BrowseForFoldr = oItem.ParentFolder.ParseName(oItem.title).Path
' Обработка нажатия кнопки Cancel и выбора диска.
 
If Err<> 0 Then
If Err.Number = 424 Then                 ' Обработать кнопку Cancel.
BrowseForFoldr ="-1"
Else
Err.Clear
' Обработать ситуацию, в которой пользователь выбирает диск.
tmp = InStr(1, oItem.title, ":")
If tmp > 0 Then          ' Символ ":" найден; взять два символа и добавить \.
BrowseForFoldr = Mid(oItem.Title, (tmp - 1), 2) & "\"
End If
End If
End If
Set oShell = Nothing
Set oItem = Nothing
On Error GoTo 0
End Function
 
'создание комментария/описания для нового архива
Dim CommentScript, CommentScriptPlace
CommentScript = "RarComment.bat"
CommentScriptPlace = "\\ARM7\temp\TO\"
WshShell.Run ( "" & CommentScript & " " & file & " " & CommentScriptPlace & "" )
 
'небольшая пауза для того, чтобы отработали батники
WScript.Sleep 100
 
'запускаем архиватор, для создания копии указанной папки
Dim WinRarPlace, WinRarParameters, WinRarDirTO, WinRarArhName, strComputerName, WinRar_ilogKey, WinRar_logKey, WinRarCommentParams
WinRarPlace = "c:\progra~1\winrar\winrar.exe"
'-ma5 winrar сохраняет файлы в версии архиватора 5.0
WinRarParameters = "a -s -r -rr10p -idcdpq -htb -ma5 -dh -isnd -ed -m3 -ag+DD-WW-MMM-YYYY_HH-MM-SS"
WinRarCommentParams = "-z" & CommentScriptPlace & "rarcomment.txt"
WinRarDirTO = "\\ARM7\temp\TO\"
WinRar_ilogKey = "-ilog\\ARM7\temp\TO\errorlog.txt"
WinRar_logKey = "-logfap=\\ARM7\temp\TO\log.txt"
WshShell.Run ( "" & WinRarPlace & " " & WinRarParameters & " " & WinRarCommentParams & " " & WinRar_ilogKey & " " & WinRar_logKey & " " & WinRarDirTO & " " & file & "" )
В процессе работы скрипт вызывает bat, для сбора MD5 хешей всех файлов, записи их в текстовый файл комментариев. Дополнительно в текстовый файл кладется вывод ipconfig /all. открывая архиватор мы увидим имя и ip ПК, с которого данный архив прилетел. Удобно. Можно еще добавить много полезной технической информации.
Содержимое файла RarComment.bat
Bash
1
2
3
4
chcp 850
md5sums.exe -n -e %1 > %2rarcomment.txt
ipconfig /all >> %2rarcomment.txt
exit
md5sums.exe снимает суммы со всех файлов в директории.
MD5sums 1.2 freeware for Win9x/ME/NT/2000/XP+ от Jem Berkes, брал на pc-tools.net

Затем запускается почтовый скрипт и отправляется на почту уведомление о бекапе. Пока не настраивал но сам скрипт ниже:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
' ------------------------------------------------------------------------------
' отправить почту об удачном выполнении скрипта
Dim EmailSubject, EmailBody
EmailSubject = "Sending Email by CDO"
EmailBody = "This is the body of a message sent via" & vbCRLF & _
        "a CDO.Message object using SMTP authentication."
Const EmailFrom = "inzaim@gmail.com"
Const EmailFromName = "username"
Const EmailTo = "username@gmail.com"
Const SMTPServer = "smtp.gmail.com"
Const SMTPLogon = "username@gmail.com"
Const SMTPPassword = "password"
Const SMTPSSL = True
Const SMTPPort = 465
Const cdoSendUsingPickup = 1    'Send message using local SMTP service pickup directory.
Const cdoSendUsingPort = 2  'Send the message using SMTP over TCP/IP networking.
Const cdoAnonymous = 0  ' No authentication
Const cdoBasic = 1  ' BASIC clear text authentication
Const cdoNTLM = 2   ' NTLM, Microsoft proprietary authentication
' First, create the message
Dim objMessage
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = EmailSubject
objMessage.From = """" & EmailFromName & """ <" & EmailFrom & ">"
objMessage.To = EmailTo
objMessage.TextBody = EmailBody
' Second, configure the server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SMTPServer
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusername") = SMTPLogon
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendpassword") = SMTPPassword
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SMTPPort
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = SMTPSSL
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
objMessage.Configuration.Fields.Update
' Now send the message!
 
objMessage.Send

Пока остается несколько нерешенных задач:
1 - Почему не срабатывает кнопка ОТМЕНА, при выборе папки?
2 - Как поставить ожидание, чтобы VBS подождал выполнения скрипта *.bat
3 - ....... может еще что-то всплывет в процессе.
1
9 / 9 / 0
Регистрация: 14.10.2014
Сообщений: 69
24.12.2014, 17:02  [ТС]
Добрый день.

Получилось сделать рабочую версию для TotalCommander 8.51a 64bit. Для связки TC и VBS использовал плагин TCIMG от Averin Andrey.
Для начала создадим кнопку в ТС со следующими параметрами:
Code
1
2
3
Команда - %COMMANDER_PATH%\TCIMG64.exe
Параметры - global lists=%Z%L||save<C:\temp\Back2\VBS\list.txt!!1> scrpt=C:\temp\Back2\VBS\rar.vbs||&&wait
Путь запуска - %COMMANDER_PATH%\TCIMG64.exe
Теперь подготовим скрипт отвечающий за запуск и параметры WinRAR. Старался обильно описывать, чтобы было более детально ясно происходящее.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Option Explicit
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
 
'запускаем архиватор, для создания копии указанной папки (rarcomment.txt)
'объявляем необходимые переменные
Dim WinRarPlace, WinRarA, WinRarKeys, WinRarDirTO, WinRarArhDate, WinRar_ilogKey, WinRar_logKey, WinRarFilesList
'место расположения WinRar
WinRarPlace = "c:\progra~1\winrar\winrar.exe"
'ключи для работы WinRar
'  a        : запуск архивации, пишется без символа "-".
' -s        : создание неприрывного архива, что экономит место, но менее устойчиво к повреждениям.
' -r        : включить обработку подкаталогов.
' -rr10p    : добавить к архиву 10% информации для восстановления архива, если он окажется битым.
' -idcdpq   : Не показывать сообщения:
'             c-отключает вывод строки с авторскими правами (copyright),
'             d-отключает вывод строки "Готово" в конце операции,
'             p-отключает вывод процентного индикатора хода выполнения,
'             q-активизирует "тихий" режим, при котором на экран выводятся только сообщения об ошибках и запросы.
' -htb      : В архивах RAR целостность данных определяется по контрольным суммам BLAKE2, 256бит. Буква b отвечает за принудительный выбор BLAKE2.
' -ma5      : winrar сохраняет файлы в версии архиватора 5.0.
' -dh       : Данный ключ включает в обработку файлы, открытые для записи другими программами.
' -isnd     : Разрешает звуковые сигналы(как работает неясно).
' -ed       : Не добавлять пустые каталоги.
' -m3       : Степень сжатия. -m0 Без сжатия, -m1 Скоростной, -m2 Быстрый, -m3 Обычный, -m4 Хороший, -m5 Максимальный.
' -z        : Добавить комментарий к архиву из файла -zfilename.txt.
' -w<путь>  : Задать каталог для временных файлов.
' @list.lst : Порядок добавления файлов в непрерывный архив. В Windows этот файл должен находиться в том же каталоге, что и RAR, либо в каталоге %APPDATA%\WinRAR.
'переменная a указывает винрару, что нужно создавать архив.
WinRarA = "a"
'переменная с необходимыми ключами для работы WinRar.
WinRarKeys = "-s -r -rr10p -idcdpq -htb -ma5 -dh -isnd -ed -m3 -w\\ARM7\temp\TO\"
'Дата создания архива используется как название сформированного архива.
WinRarArhDate = "-agDD-WW-MMM-YYYY_HH-MM-SS"
'Директория куда будут складываться новые архивы
WinRarDirTO = "\\ARM7\temp\TO\"
'Файл ошибок винрара
WinRar_ilogKey = "-ilog\\ARM7\temp\TO\errorlog.txt"
'Файл лога работы винрара
'WinRar_logKey = "-logfap=\\ARM7\temp\TO\log.txt"
'список файлов по которому винрар создаст новый архив
WinRarFilesList = "@C:\temp\Back2\VBS\list.txt"
'Запуск самого архиватора WinRar
'WshShell.Run ( "" & WinRarPlace & " " & WinRarParameters & " " & WinRarCommentParams & " " & WinRarFilesList & " " & WinRar_ilogKey & " " & WinRar_logKey & " " & WinRarDirTO & " " & file & "" )
WshShell.Run ( "" & WinRarPlace & " " & WinRarA & " " & WinRarKeys & " " & WinRarArhDate & " " & WinRar_ilogKey & " " & WinRar_logKey & " " & WinRarDirTO & " " & WinRarFilesList & "" )
 
'запускаем отправку уведомления на емаил о корректном выполнении задачи.
'Dim EmailSend
'EmailSend = "C:\temp\Back2\VBS\SendMail.vbs"
'WshShell.Run ("" & EmailSend & "")
К сожалению пришлось пока исключить из этого набора MD5 и создание дополнительной информации для складывания в архив. Я пока не понимаю как поставить ожидание, чтобы VBS дождался выполнения bat и продолжил свою работу после этого.

Отправка почты реализуется скриптом, который я выкладывал выше.

За время разработки созрели вопросы, которые пока не в состоянии решить:
1. Класть в имя архива имя ПК(некритично)?
2. Как реализовать докачку файлов архива на сервер, если происходит обрыв соединения?
3. Как передавать параметры и лог файл работы WinRAR почтовому скрипту, чтобы тот отдавал в ящик приемлемый отчет о своей работе.
...Уффф...
Вроде пока все.
1
9 / 9 / 0
Регистрация: 14.10.2014
Сообщений: 69
22.01.2015, 12:53  [ТС]
Для корректной передачи данных решил использовать программу killcopy. Она может работать как в GUI в windows, так и в консольном режиме.

Возник вопрос, как передать имя архива в данную программу?
0
251 / 239 / 16
Регистрация: 31.12.2009
Сообщений: 324
22.01.2015, 19:16
inzaim, если верить её сайту: http://www.killprog.com/killcopyr.html то примерно так:
Code
1
kc.exe "|file.rar|archive\current -eruw"
file.rar - архив
archive\current - путь куда копировать (видимо UNC либо примапленный на локальный драйв)
0
9 / 9 / 0
Регистрация: 14.10.2014
Сообщений: 69
23.01.2015, 10:24  [ТС]
Вы меня неверно поняли. Я не понимаю как на VBS передать для killcopy сформированное винраром имя.
А с самими ключами и консольным режимом работы killcopy уже ознакомился.
0
251 / 239 / 16
Регистрация: 31.12.2009
Сообщений: 324
23.01.2015, 14:24
inzaim, раз уж вы полагаетесь на винрар при генерации имени вашего архива, а не делаете его самостоятельно, а потом подсовываете в архиватор, то представляется что перед запуском архиватора надо "снять" список файлов в строку (например), а после окончания работы архиватора сравнить текущий состав файлов с сохраненным, приведенный скрипт это и делает
Вставьте вызов архиватора в место где написан комментарий
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
dim sF: sF = "."
dim j, s
set objFS = WScript.CreateObject("Scripting.FileSystemObject")
set objF = objFS.GetFolder(sF).Files
 
 
For Each j in objF
    s = s & j.name & vbCrLf
Next
MsgBox(s)
 
'здесь пока "висит" следующий MsgBox вручную или на автомате
'создаем любой файл для проверки скрипта
 
WScript.Echo("objF.count = " & objF.count)
 
set objF = objFS.GetFolder(sF).Files
 
WScript.Echo("objF.count = " & objF.count)
 
 
For Each j in objF
    if InStr(1, Cstr(s), Cstr(j.name), 0) = 0 Then
        MsgBox("found file: " & j.name)
    End If
Next
 
WScript.Quit
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.01.2015, 14:24
Помогаю со студенческими работами здесь

Total Commander
Создать в паскале бета-версию Total Commander... чтобы работали горячие клавиши, верхнее меню и по папкам можно было побегать ( папки можно...

Атрибуты в Total Commander
Как дать атрибуты доступа chmod 777 в Total Commander на все каталоги, каталоги которые находятся в каталогах и файлы в них ? ну думаю...

Совместимость с total commander
чет после каждого обновления ось все меньше хочет дружить с total commander-ом... или это у меня одного так? O_o

Total commander зараза?
Наши админы поставили всем mcafee версии 8.0, и сразу он загнал в карантин мой total comander, сказав, что он заражен вирусом Artemis... ...

Панели в Total Commander
Здравствуйте. Сразу дико извиняюсь если не в ту ветку написал. Необходимо (если возможно) в тотал командере сделать две разные панели...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru