[Quote]

    Ander_73
  • 15549
  • Longevity: 6 years 4 months
  • Posts: 3271
  • REPUTATION:127

    [+] [-]
Коллекция VBS-вставок для использования в CMD-скриптах.

Browse for folder

Заголовок может быть многострочным, строки разделяются символом "^".
>tst.vbs echo set dir=CreateObject("Shell.Application").BrowseForFolder(0, Replace(WScript.Arguments(0), "^", vbCrLf), 8, 17) : If not dir is Nothing Then WScript.Echo dir.Self.Path
set dir=& for /f "delims=" %%a in (
'cscript //nologo tst.vbs "Заголовок дерева выбора папок:"'
) do set "dir=%%a"
if defined dir echo "%dir%"
del /q tst.vbs

Select file

Использование VBS здесь необязательно, но тогда нужно не забывать менять кодовую страницу на 1251.
>tst.vbs echo WScript.Echo CreateObject("WScript.Shell").Exec("mshta.exe ""about:<input type=file id=FILE><script>FILE.click();new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);</script>""").StdOut.ReadLine
set fname=& for /f "delims=" %%a in ('cscript //nologo tst.vbs') do set "fname=%%a"
if defined fname echo "%fname%"
del /q tst.vbs

InputBox

Заголовок строки может быть многострочным, строки разделяются символом "^".
>tst.vbs echo WScript.Echo InputBox(Replace(WScript.Arguments(0), "^", vbCrLf), WScript.Arguments(1), WScript.Arguments(2))
set ln=& for /f "delims=" %%a in (
'cscript //nologo tst.vbs "Заголовок строки ввода:" "Заголовок окна" "Значение по умолчанию"'
) do set "ln=%%a"
if defined ln echo "%ln%"
del /q tst.vbs

MsgBox & Popup

Сообщение может быть многострочным, строки разделяются символом "^".
Комбинация кнопок, значков и дефолта через суммирование. Например: 4+32+256 -> set opt=292
set opt=17
::    0 = Кнока "OK"
::    1 = Кнопки "OK" и "Cancel"
::    2 = Кнопки "Abort", "Retry", "Ignore"
::    3 = Кнопки "Yes", "No", "Cancel"
::    4 = Кнопки "Yes" и "No"
::    5 = Кнопки "Retry" и "Cancel"
::   16 = Иконка "Critical Message"
::   32 = Иконка "Question Message"
::   48 = Иконка "Warning Message"
::   64 = Иконка "Information Message"
::    0 = Первая кнопка по умолчанию
::  256 = Вторая кнопка по умолчанию
::  512 = Третья кнопка по умолчанию
::  768 = Четвёртая кнопка по умолчанию
:: 4096 = Режим "System modal" (все приложения системы ждут нажатия кнопки)
>tst.vbs echo WScript.Echo MsgBox(Replace(WScript.Arguments(0), "^", vbCrLf), WScript.Arguments(1), WScript.Arguments(2))
for /f %%a in (
'cscript //nologo tst.vbs "Сообщение" %opt% " Заголовок"'
) do set code=%%a
::    1 = OK
::    2 = Отмена (Cancel)
::    3 = Стоп (Abort)
::    4 = Повтор (Retry)
::    5 = Пропустить (Ignore)
::    6 = Да (Yes)
::    7 = Нет (No)
del /q tst.vbs
set opt=17
:: Время задержки, секунд. 0 = бесконечно
set wait=10
>tst.vbs echo WScript.Echo CreateObject("WScript.Shell").Popup(Replace(WScript.Arguments(0), "^", vbCrLf), WScript.Arguments(1), WScript.Arguments(2), WScript.Arguments(3))
for /f %%a in (
'cscript //nologo tst.vbs "Сообщение" %wait% " Заголовок" %opt%'
) do set code=%%a
::   -1 = время истекло (нет нажатия)
del /q tst.vbs

Run as Administrator

Применяется решение через создание стороннего файла (%tmp%\1.cmd) из-за проблем с путями нестандартного вида (спецсимволы, кириллица и проч.)
>nul 2>&1 dism&& 2>nul del /q %tmp%\1.cmd|| goto runas
exit
:runas
>%tmp%\1.cmd echo @"%~f0" "параметры запуска"
>tst.vbs echo CreateObject("Shell.Application").ShellExecute "%comspec%", "/c %tmp%\1.cmd", "", "runas", 1
cscript //nologo tst.vbs
del /q tst.vbs
:: Вид окна приложения: normal=1, hide=0, 2=Min, 3=max, 4=restore, 5=current, 7=min/inactive, 10=default

Unzip & System copy

В качестве источника может выступать не только архив (.zip или .cab), но и папка, и тогда будет происходить копирование содержимого через системную функцию копирования с окном прогресса.
>tst.vbs echo With CreateObject("Shell.Application") .NameSpace(WScript.Arguments(0)).CopyHere(.NameSpace(WScript.Arguments(1)).Items) End With
cscript //nologo tst.vbs "$:\Папка\назначения" "$:\Источник\архив.zip"
del /q tst.vbs

Download

>tst.vbs echo set x=CreateObject("Microsoft.XMLHTTP") : x.Open "GET", WScript.Arguments(0), False : x.Send : With CreateObject("Adodb.Stream") : .type = 1 : .open : .write x.responseBody : .savetofile WScript.Arguments(1), 2 : End With
cscript //nologo tst.vbs "https://www.url.com/file.ext" "file.ext"
del /q tst.vbs
-

Shortcut

With CreateObject("WScript.Shell").CreateShortcut("test.lnk")
.TargetPath = "%comspec%"
.Arguments = "/c dir& pause"
.Description = "MyProgram"
.HotKey = "ALT+CTRL+F"
' "ALT+", "CTRL+", "SHIFT+", "EXT+".
' "A" .. "Z", "0" .. "9", "Back", "Tab", "Clear", "Return", "Escape", "Space", "Prior".
.IconLocation = "%comspec%, 1"
.WindowStyle = "1"
' 3=Maximized, 7=Minimized, 4=Normal
.WorkingDirectory = "%windir%"
.Save
End With

ADODB Stream

Замена в бинарном файле символов 0D 0A => "Пробел" 0A
Можно указывать символьные строки в кавычках.
With CreateObject("ADODB.Stream")
.Open
.Type = 2
.Charset = "Windows-1252"
.LoadFromFile "Исходный файл"
data = .ReadText
.Close
data = Replace(data, Chr(13)&Chr(10), Chr(32)&Chr(10))
.Open
.Type = 2
.Charset = "Windows-1252"
.WriteText data
.SaveToFile "Файл результата", 2
.Close
End With
Считать из бинарного файла блок размером 1000 байт по смещению 1000 байт от начала и записать в другой файл.
set dest = CreateObject("ADODB.Stream")
dest.Open
dest.Type = 1
With CreateObject("ADODB.Stream")
.Open
.Type = 1
.LoadFromFile "Исходный файл"
.Position = 1000
.CopyTo dest, 1000
.Close
End With
dest.SaveToFile "Файл результата", 2
dest.Close


Display posts:    

Current time is: 10-Jun 04:42

All times are UTC + 3


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum