Показать полную графическую версию : [решено] pop-up окно из батника
доброго времени суток!
есть ежедневная рутинная задача - копировать файлы в папки с заданным именем. имя папки берется из переменной, которую я создаю так:
Set /p folder="Введите имя каталога:"
но все происходит в черном окне смд, а мне бы хотелось, чтобы было всплывающее окошко виндовз с приглашением ввести имя и кнопочкой ОК, и дальше, если все успешно, не просто echo в черном окошечке, а какой нибудь алерт окно, что операция прошла успешно, как осуществить?
заранее благодарен!
oleg-sm, без сторонних средств на «чистых» пакетных файлах сие не реализовать. Переходите на WSH или PoSH. Опишете задачу целиком — возможно, Вам и сделают.
Вы вводите только имя папки или путь целиком? Существующей или не существующей папки?
в общем код выглядит примерно так (довольно примитивно, будет еще дорабатываться):
@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
вот и хотелось бы алерты не в смд, а интерактивно, чтобы я знал, что произошло.
заранее спасибо
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
Iska, право, даже не знаю, что вам и ответить :) большое спасибо, за ваш труд и не безразличие, но только этот код я не смогу править сам, ведь не знаю ВБ, а проще способа случайно нет? )
проверил, работает, только выдает ошибку в строке 16 символ 5 - файл уже существует
а проще способа случайно нет? ) »
Царская дорога как метафора (http://ru.wikipedia.org/wiki/%D0%A6%D0%B0%D1%80%D1%81%D0%BA%D0%B0%D1%8F_%D0%B4%D0%BE%D1%80%D0%BE%D0%B3%D0%B0#.D0.A6.D0.B0.D1.80.D 1.81.D0.BA.D0.B0.D1.8F_.D0.B4.D0.BE.D1.80.D0.BE.D0.B3.D0.B0_.D0.BA.D0.B0.D0.BA_.D0.BC.D0.B5.D1.82.D0 .B0.D1.84.D0.BE.D1.80.D0.B0) ;).
Не переживайте, не боги горшки обжигают. Учиться никогда не поздно.
проверил, работает, только выдает ошибку в строке 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
проще на 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
за работоспособность не ручаюсь, писалось прямо здесь
насколько я понимаю, ВБ вроде распространней будет, а есть какой то мануальчик, как быстрее осовить его? не книга, а может сборник готовых решений и основы синтаксиса?
насколько я понимаю, ВБ вроде распространней будет »
WSH — встроенное решение Windows.
а есть какой то мануальчик, как быстрее осовить его? не книга, а может сборник готовых решений и основы синтаксиса? »
Поройтесь здесь: Windows Script Host: Коллекция ссылок (http://forum.script-coding.com/viewtopic.php?id=10). Ссылки на курсы на Askit.ru, ссылки на сборники готовых решений и т.п.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC