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

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

oleg-sm 06-08-2013 13:14 2197163

pop-up окно из батника
 
доброго времени суток!
есть ежедневная рутинная задача - копировать файлы в папки с заданным именем. имя папки берется из переменной, которую я создаю так:
Код:

Set /p folder="Введите имя каталога:"
но все происходит в черном окне смд, а мне бы хотелось, чтобы было всплывающее окошко виндовз с приглашением ввести имя и кнопочкой ОК, и дальше, если все успешно, не просто echo в черном окошечке, а какой нибудь алерт окно, что операция прошла успешно, как осуществить?
заранее благодарен!

Iska 06-08-2013 16:55 2197304

oleg-sm, без сторонних средств на «чистых» пакетных файлах сие не реализовать. Переходите на WSH или PoSH. Опишете задачу целиком — возможно, Вам и сделают.

Вы вводите только имя папки или путь целиком? Существующей или не существующей папки?

oleg-sm 06-08-2013 19:46 2197432

в общем код выглядит примерно так (довольно примитивно, будет еще дорабатываться):
Код:

@echo off
SetLocal EnableExtensions EnableDelayedExpansion
Set /p folder="Введите имя каталога:"

ping -n 1 -l 1 -w 1000 192.168.10.20
if "!ErrorLevel!"==0(
        mkdir "\\192.168.10.20\new\%folder%"
        copy "C:\newfile\bsv\list.txt" "\\192.168.10.20\new\%folder%\"
)else(
        echo "BSV1 выключена"
)
Ping -n 1 -l 1 -w 1000 192.168.20.30
if "!ErrorLevel!"==0(
        mkdir "\\192.168.20.30\new\%folder%"
        copy "C:\newfile\bsv\list.txt" "\\192.168.20.30\new\%folder%\"
)else(
        echo "BSV2 выключена"
)

будет еще проверки на запись или неудачу (если нет пинга) в папки с помощью if else
вот и хотелось бы алерты не в смд, а интерактивно, чтобы я знал, что произошло.

заранее спасибо

Iska 06-08-2013 20:21 2197458

oleg-sm, зачем пинг? Достаточно ведь просто проверить существование удалённого ресурса «\\192.168.10.20\new».

Не проверялось:
Код:

Option Explicit

Dim strNewFolder
Dim strShare
Dim strPath


strNewFolder = Trim(InputBox("Input new folder name", "Input folder name", "New folder"))

If Len(strNewFolder) <> 0 Then
        With WScript.CreateObject("Scripting.FileSystemObject")
                For Each strShare In Array("\\192.168.10.20\new", "\\192.168.10.30\new2")
                        If .FolderExists(strShare) Then
                                strPath = .BuildPath(strShare, strNewFolder)
                               
                                .CreateFolder strPath
                                .CopyFile "C:\newfile\bsv\list.txt", strPath & "\", True
                        Else
                                WScript.Echo "Can't find share [" & strShare & "]."
                        End If
                Next
        End With
Else
        ' Nothing input
End If

WScript.Quit 0


oleg-sm 06-08-2013 21:47 2197512

Iska, право, даже не знаю, что вам и ответить :) большое спасибо, за ваш труд и не безразличие, но только этот код я не смогу править сам, ведь не знаю ВБ, а проще способа случайно нет? )

oleg-sm 06-08-2013 22:14 2197529

проверил, работает, только выдает ошибку в строке 16 символ 5 - файл уже существует

Iska 06-08-2013 22:52 2197560

Цитата:

Цитата oleg-sm
а проще способа случайно нет? ) »

Царская дорога как метафора ;).

Не переживайте, не боги горшки обжигают. Учиться никогда не поздно.

Цитата:

Цитата oleg-sm
проверил, работает, только выдает ошибку в строке 16 символ 5 - файл уже существует »

Это «.CreateFolder strPath». Будем создавать папку только тогда, когда она не существует:
читать дальше »
Код:

Option Explicit

Dim strNewFolder
Dim strShare
Dim strPath


strNewFolder = Trim(InputBox("Input new folder name", "Input folder name", "New folder"))

If Len(strNewFolder) <> 0 Then
        With WScript.CreateObject("Scripting.FileSystemObject")
                For Each strShare In Array("\\192.168.10.20\new", "\\192.168.10.30\new2")
                        If .FolderExists(strShare) Then
                                strPath = .BuildPath(strShare, strNewFolder)
                               
                                If Not .FolderExists(strPath) Then
                                        .CreateFolder strPath
                                End If
                               
                                .CopyFile "C:\newfile\bsv\list.txt", strPath & "\", True
                        Else
                                WScript.Echo "Can't find share [" & strShare & "]."
                        End If
                Next
        End With
Else
        ' Nothing input
End If

WScript.Quit 0


McLotos 06-08-2013 22:53 2197561

проще на autoit, но его тоже учить нужно =)
Так что из таких вариантов (не bat) выбор не велик, либо autoit либо VBS
на autoit это будет что-то вроде
Наверное как-то так:
Код:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate('Копирование', 320, 150)
GUICtrlCreateLabel('Копируемая директория:', 8, 10)
$Input1 = GUICtrlCreateInput("", 8, 30, 257, 21)
$Button1 = GUICtrlCreateButton("...", 272, 25, 35, 25)
GUICtrlCreateLabel('Пункт назначения:', 8, 60)
$Input2 = GUICtrlCreateInput("", 8, 80, 257, 21)
$Button2 = GUICtrlCreateButton("...", 272, 80, 35, 25)
$Button3 = GUICtrlCreateButton("Начать копирование", 100, 120, 120, 25)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            $folder1 = FileSelectFolder("Выберите каталог.", "", '', '', GUICreate(''))
            GUICtrlSetData($Input1, $folder1)
        Case $Button2
            $folder2 = FileSelectFolder("Выберите каталог.", "", '', '', GUICreate(''))
            GUICtrlSetData($Input2, $folder2)
        Case $Button3
            If GUICtrlRead($Input1) = "" Then
                          MsgBox(0,'Ошибка','Не казан каталог-источник')
                        ElseIf GUICtrlRead($Input2) = "" Then
                          MsgBox(0,'Ошибка','Не указан каталог назначения')
                        Else
                          MsgBox(0,'',$folder1)
                          DirCopy ($folder1,$folder2,0) ;если третий параметр 1 тогда с перезаписью файлов с одинаковыми именами
                        EndIf
    EndSwitch
WEnd

за работоспособность не ручаюсь, писалось прямо здесь

oleg-sm 06-08-2013 23:04 2197570

насколько я понимаю, ВБ вроде распространней будет, а есть какой то мануальчик, как быстрее осовить его? не книга, а может сборник готовых решений и основы синтаксиса?

Iska 07-08-2013 00:34 2197608

Цитата:

Цитата oleg-sm
насколько я понимаю, ВБ вроде распространней будет »

WSH — встроенное решение Windows.

Цитата:

Цитата oleg-sm
а есть какой то мануальчик, как быстрее осовить его? не книга, а может сборник готовых решений и основы синтаксиса? »

Поройтесь здесь: Windows Script Host: Коллекция ссылок. Ссылки на курсы на Askit.ru, ссылки на сборники готовых решений и т.п.


Время: 10:04.

Время: 10:04.
© OSzone.net 2001-