PDA

Показать полную графическую версию : [решено] Добавление в *.VBS скрипт диалогового окна.


s-urbanas
11-02-2015, 13:01
Добрый день!

Помогите реализовать следующую задачу:

Имеется:

*.VBS скрипт при запуске которого с помощью криптографии автоматически подписываются, шифруются, архивируются и переименовываются файлы находящиеся в папке OUT. Файлы именуются согласно маске MIFNS.001, MIFNS.002, MIFNS.003 и т.д.

Если мне необходимо сделать так, чтобы нумерация начиналась не с 1, а с 3 (или любой другой цифры), я меняю значение строки nArjNumber =*, где * - номер начального файла.

Что нужно сделать:

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

В общем сделать так, чтобы в случае чего не приходилось лезть руками в скрипт и менять номер самому.

Сам скрипт во вложении.

'On Error Resume Next


strFnsXmlFolder = "D:\BankScheta2\base\OUT\"
const cMaxNum = 2000

Set sh = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")


m = Month(Now)
d = Day(Now)
y = Right(Year(Now), 2)
If m < 10 Then m = "0" & m
If d < 10 Then d = "0" & d
strDate = y & m & d
nArjNumber =1


Set folder = fso.GetFolder(strFnsXmlFolder)
If Not fso.FolderExists(strFnsXmlFolder) Then
MsgBox("Не найден каталог " & strFnsXmlFolder)
Wscript.Quit
End If

strFnsTempFolder = strFnsXmlFolder & "Temp\"
If Not fso.FolderExists(strFnsTempFolder) Then
fso.CreateFolder(strFnsTempFolder)
End If

If Not fso.FolderExists(strFnsTempFolder) Then
MsgBox("Не найден каталог " & strFnsTempFolder)
Wscript.Quit
End If



Function CreateFnsArj()
strNum = CStr(nArjNumber)
n = 3 - Len(strNum)
If n > 0 Then strNum = String( n, "0") + strNum

strArjPath = strFnsXmlFolder & "BN25811" & strDate & "0" & strNum & ".ARJ"

sh.Run "C:\ARH\arj32.exe a -e " & strArjPath & " " & strFnsTempFolder, 7, True

strMifnsPath = strFnsXmlFolder & "MIFNS." & strNum
' sh.Run "D:\BankScheta2\scsignex.exe -s -f" & file.Path & " -o" & strFnsXmlFolder & "sign.log -b1", 7, True
sh.Run "D:\BankScheta2\scsignex.exe -s -f" & strArjPath & " -o" & strFnsXmlFolder & "sign.log -b1", 7, True
sh.Run "C:\ARH\arj32.exe a -e " & strMifnsPath & " " & strArjPath, 7, True

fso.DeleteFile strFnsTempFolder & "*.*", True
nArjNumber = nArjNumber + 1
End Function



fso.DeleteFile strFnsTempFolder & "*.*", True


strFileList = strFnsXmlFolder & "xmlfilelist.lst"
set fList = fso.OpenTextFile(strFileList, 2, True)
nCount = 0

Set folder = fso.GetFolder(strFnsXmlFolder)
For each file in folder.files
If (UCase(fso.GetExtensionName(file.Path)) = "XML") Then
fList.WriteLine(file.Path)
nCount = 1
End If
Next

fList.Close

If nCount = 0 Then
MsgBox("В каталоге " & strFnsTempFolder & "отсутствуют XML-файлы" )
Wscript.Quit
End If


sh.Run "C:\WINNT\asrkeyw.exe", 7, True
sh.Run "subst A: /d", 7, True
sh.Run "subst A: D:\BankScheta2\MGTU", 7, True

sh.Run "D:\BankScheta2\scsignex.exe -s -l" & strFileList & " -o" & strFnsXmlFolder & "sign.log -b1", 7, True

sh.Run "subst A: /d", 7, True
sh.Run "subst A: D:\BankScheta2\CUKS", 7, True

sh.Run "D:\BankScheta2\scsignex.exe -e -a0020 -l" & strFileList & " -o" & strFnsXmlFolder & "crypt.log -b1", 7, True

sh.Run "subst A: /d", 7, True
sh.Run "subst A: D:\BankScheta2\MGTU", 7, True

nCount = 1
Set folder = fso.GetFolder(strFnsXmlFolder)
For each file in folder.files
If (UCase(fso.GetExtensionName(file.Path)) = "XML") Then
fso.CopyFile file.Path, strFnsTempFolder, True

If nCount = cMaxNum Then
CreateFnsArj()
nCount = 0
End If

nCount = nCount + 1
End If
Next


If nCount > 1 Then
CreateFnsArj()
End If

' sh.Run "subst A: /d", 7, True

Iska
11-02-2015, 13:37
Замените:
nArjNumber =1
на:
nArjNumber = CInt(Trim(InputBox("Enter start number", "Enter number", 1)))

s-urbanas
11-02-2015, 14:44
Iska, спасибо!

А можно ли сделать так, чтобы по нажатию кнопки "Cancel" скрипт полностью прекращал свою работу? Сейчас он валится с ошибкой (см. скриншот). Жалуется на 17 строку "nArjNumber = CInt(Trim(InputBox("Enter start number", "Enter number", 1)))". Видимо после нажатия отмены хочет продолжать свою работу, но ничего не получается.

http://images.vfl.ru/ii/1423654838/2fd0d37d/7751720_m.jpg (http://vfl.ru/fotos/2fd0d37d7751720.html)

Iska
11-02-2015, 15:28
Замените в оригинальном скрипте ту же часть на:
Dim strValue

strValue = Trim(InputBox("Enter start number", "Enter number", 1))

If Len(strValue) = 0 Then
WScript.Quit 1
End If

If Not IsNumeric(strValue) Then
WScript.Echo "Need numeric value"
WScript.Quit 2
End If

nArjNumber = CInt(strValue)

s-urbanas
11-02-2015, 16:11
Iska, всё получилось! Большое Вам спасибо!




© OSzone.net 2001-2012