VBS学习1 - 语法、内置函数、内置对象

news/2024/9/19 14:12:54 标签: 学习, vbs, windows, 语法, 脚本, 使用

文章目录

    • 概述
    • 执行脚本
    • 语法
      • 转义字符
      • 文本弹框msgbx
      • 定义变量dim(普通类型)
      • 定义接收对象set
      • 字符拼接&
      • 用户自定义输入框inputbox以及输入判断ifelse
      • 数组(参数表最大索引,非数组容量)
        • 有容量无元素
        • 基于元素确定容量
      • 循环、迭代
    • 内置函数
    • 自定义函数
      • print - 控制台打印
      • getArraySize - 获取数组长度
      • execCmd - 执行CMD命令
      • readFileContent - 读取文件内容
      • getEnvKeyValue - 获取某个环境变量值
      • setEnvKeyValue - 新建或修改某个环境变量值
    • Windows常用内置对象
      • 文件对象:Scripting.FileSystemObject
      • 系统环境变量对象:USER

概述

VBS(Visual Basic Script Editor): 基于Visual Basic开发的脚本语言文件

注释(仅有单行注释符号,无多行): 英文单引号’,

判断: 值是否等于无需像其他语言一样输入双等于号直接单等于号即可,不等于则使用<>进行替代

系统对象使用的文档(可直接参考微软的VBA文档):https://learn.microsoft.com/en-us/office/vba/api/overview/

语法细节:
  1. 关键字大小写不敏感,函数名大小写敏感。
 定义Function函数时如果没有设置返回值,则内部自动转成sub,而调用sub

执行脚本

//方式1
直接双击脚本

//方式2 ==  CMD命令窗口
wscript //e:vbscript vbs脚本文件

//方式3 == CMS命令行窗口
C:\Windows\System32\cscript.exe  vbs脚本文件
适合交互
适合批处理
执行程序
wscript:窗口应用程序,不创建控制台窗口,输出不会在命令行中显示
cscript:控制台应用程序,运行时会有一个命令行窗口,输出被发送到这个窗口

语法

转义字符

vbs">'换行符 vbCrLf

Public Function print(message)
    Set stdout=CreateObject("Scripting.FileSystemObject").GetStandardStream(1)
    stdout.WriteLine message
End Function

print "fdsfsd"&"fsdfsdf"

print "=========="

print "fdsfsd"&vbCrLf&"fsdfsdf"

在这里插入图片描述

文本弹框msgbx

vbs">'类似前端的alert玩意
msgbox "弹框内容"

在这里插入图片描述

定义变量dim(普通类型)

vbs">dim name
name="lrc"

msgbox name

在这里插入图片描述

定义接收对象set

vbs">Set oFS = CreateObject("Scripting.FileSystemObject")

字符拼接&

vbs">dim name,sport
name="lrc"
sport="swimming"

msgbox name&"喜欢的运动是:"&sport

在这里插入图片描述

用户自定义输入框inputbox以及输入判断ifelse

格式: if then elseif then else then end if

vbs">Public Function print(message)
    Set stdout=CreateObject("Scripting.FileSystemObject").GetStandardStream(1)
    stdout.WriteLine message
End Function

dim a,b,c,result
result = 0

a = inputbox("请输入一个数字")
print a

b = inputbox("请输入操作符")
print b

c = inputbox("请输入另一个数组")
print c

if b = "+" then
    result = CDbl(a) + CDbl(c)
elseif b = "-" then
    result = a - c
elseif b = "*" then
    result = a * c
elseif b = "/" then
    result = a / c
end if

print a&b&c&"="&result
msgbox result




在这里插入图片描述

数组(参数表最大索引,非数组容量)

有容量无元素
vbs">Public Function print(message)
    Set stdout=CreateObject("Scripting.FileSystemObject").GetStandardStream(1)
    stdout.WriteLine message
End Function

'定义容量为5个元素的数组,里面的括号表示数组的最大索引
dim nums(4)

nums(0)=10
nums(3)=20

print nums(0)
print nums(3)

在这里插入图片描述

基于元素确定容量
vbs">Public Function print(message)
    Set stdout=CreateObject("Scripting.FileSystemObject").GetStandardStream(1)
    stdout.WriteLine message
End Function

print "=========="

dim nums(2)
nums(0) = 0
nums(1) = 1
nums(2) = 2
for i = 0 to 2
    print nums(i)
next

print "=========="

dim nums2
nums2 = array(0,1,2)
for i = 0 to 2
    print nums2(i)
next

在这里插入图片描述

循环、迭代

vbs">Public Function print(message)
    Set stdout=CreateObject("Scripting.FileSystemObject").GetStandardStream(1)
    stdout.WriteLine message
End Function

public function getArraySize(nums)
    getArraySize = UBound(nums) - LBound(nums) + 1
end function




dim nums(5)
nums(0) = 1
nums(1) = 11
nums(2) = 111
nums(3) = 1111
nums(4) = 11111
nums(5) = 111111

for i = 0 to getArraySize(nums)-1
    print i
Next

print ""
print ""

dim index
index =0
do while true
    if index = getArraySize(nums) then
        Exit do
    end if

    print "nums["&index&"]: "&nums(index)
    index = index + 1
loop

print ""
print ""


index =0
do
    print "nums["&index&"]: "&nums(index)
    index = index + 1
loop until index = getArraySize(nums)

print ""
print ""

for each numElem in nums
    print numElem
next

在这里插入图片描述

内置函数

//将入参转成小数类型Double出参结果
CDbl

//将入参转成整数类型Integer出参结果
CInt

//将入参转成长整数类型Long出参结果
CLNG


//将入参转成长布尔类型Bool出参结果 ==  0=>false 其他数字t=>true,转不出来数字报错
CBool


//将入参转成字节类型Byte出参结果
CByte


//用于将表达式转换为货币型数据(Currency)
CCur


//用于将有效的日期表达式转换为日期型数据
CDate

//将表达式转换为单精度浮点型数据(Single) == java的Float
CSng

//返回字符串首字母的ANSI字符代码(ASCII值) == 数字
Asc

//将指定的ANSI字符代码转换为相应的字符 == 字符串
Chr

//将指定的数字转换为十六进制值
Hex

//将指定的数字转换为八进制值
Oct

//字符串2在字符串1的索引位置,索引从1开始,不是从0
InStr

//字符串全部变成大写
ucase
vbs">Public Function print(message)
    Set stdout=CreateObject("Scripting.FileSystemObject").GetStandardStream(1)
    stdout.WriteLine message
End Function

dim a,b,c,d,e,f,g

'转成浮点数,入参非数字直接报错
a = CDbl("123")
print a

a = CDbl("123.5")
print a

'非数字直接报错
b = CBool(2)
print b
b = CBool(0)
print b
b = CBool(0.6)
print b

print ""

'8字节的数字
c = CByte("30")
print c

d = Asc("a")
print d

e = Chr(97)
print e

f = Hex(20)
print f

g = Oct(20)
print g

在这里插入图片描述

vbs">Public Function print(message)
    Set stdout=CreateObject("Scripting.FileSystemObject").GetStandardStream(1)
    stdout.WriteLine message
End Function

dim h, i
h = "fsdfds123f"
i = "123"
print InStr(h, i)

在这里插入图片描述

自定义函数

tip: 有无返回值,建议都使用 function 即可,毕竟相较于其他语言,并没有sub这玩意

函数
function:期望函数调用有返回值
sub:期望函数调用无返回值

print - 控制台打印

vbs">Public Function print(message)
    Set stdout=CreateObject("Scripting.FileSystemObject").GetStandardStream(1)
    stdout.WriteLine message
End Function

print "fsfsdf"

在这里插入图片描述

getArraySize - 获取数组长度

vbs">Public Function print(message)
    Set stdout=CreateObject("Scripting.FileSystemObject").GetStandardStream(1)
    stdout.WriteLine message
End Function

public function getArraySize(nums)
    getArraySize = UBound(nums) - LBound(nums) + 1
end function


dim nums(5)


arraySize = getArraySize(nums)
print arraySize

在这里插入图片描述

execCmd - 执行CMD命令

vbs">Public Function print(message)
    Set stdout=CreateObject("Scripting.FileSystemObject").GetStandardStream(1)
    stdout.WriteLine message
End Function

public function getArraySize(nums)
    getArraySize = UBound(nums) - LBound(nums) + 1
end function


'' 创建WScript.Shell对象
'Set objShell = CreateObject("WScript.Shell")
'
'' 执行cmd命令,这里以"ipconfig /all"为例
'Set objExecObject = objShell.Exec("cmd /c ipconfig /all")
'
'' 读取命令执行的结果
'Do While Not objExecObject.StdOut.AtEndOfStream
'    strText = objExecObject.StdOut.ReadAll()
''    WScript.Echo strText
'    print "================="
'    print "================="
'    print strText
'Loop


public Function execCmd(cmd)
    dim result
' 创建WScript.Shell对象
    Set objShell = CreateObject("WScript.Shell")

    ' 执行cmd命令,这里以"ipconfig /all"为例
    Set objExecObject = objShell.Exec("cmd /c "&cmd)

    ' 读取命令执行的结果
    Do While Not objExecObject.StdOut.AtEndOfStream
        result = objExecObject.StdOut.ReadAll()
    Loop

    execCmd = result

end Function

dim pwdResult,execComandStr
execComandStr = "pwd"
pwdResult = execCmd(execComandStr)

print pwdResult

在这里插入图片描述

readFileContent - 读取文件内容

vbs">Public Function print(message)
    Set stdout=CreateObject("Scripting.FileSystemObject").GetStandardStream(1)
    stdout.WriteLine message
End Function

public function getArraySize(nums)
    getArraySize = UBound(nums) - LBound(nums) + 1
end function

public Function execCmd(cmd)
    dim result
    ' 创建WScript.Shell对象
    Set objShell = CreateObject("WScript.Shell")

    ' 执行cmd命令,这里以"ipconfig /all"为例
    Set objExecObject = objShell.Exec("cmd /c "&cmd)

    ' 读取命令执行的结果
    Do While Not objExecObject.StdOut.AtEndOfStream
        result = objExecObject.StdOut.ReadAll()
    Loop

    execCmd = result

end Function




public Function readFileContent(filePath)
    Set oFS = CreateObject("Scripting.FileSystemObject")


    dim result,currentRowContent
    result = ""
	
	'文件不存在,直接退出
    If Not oFS.FileExists(filePath) Then
        print "[warning]file no exit: "&filePath
        readFileContent = result
        exit Function
    End If

	'文件存在
    Set oFile = oFS.OpenTextFile(filePath, 1, 0)
    do until oFile.AtEndOfStream
        currentRowContent = oFile.ReadLine
        result = result & currentRowContent & vbLf
    loop
    readFileContent = result

end Function


dim result


result = readFileContent("D:\workspace\personal\selenium-test\src\main\java\work\linruchang\vbsFile\1.txt")
print result


result = readFileContent("D:\workspace\personal\selenium-test\src\main\java\work\linruchang\vbsFile\2.txt")
print result

在这里插入图片描述

在这里插入图片描述

getEnvKeyValue - 获取某个环境变量值

vbs">'打印日志
Public Function print(message)
    Set stdout=CreateObject("Scripting.FileSystemObject").GetStandardStream(1)
    stdout.WriteLine message
End Function

'获取某个环境变量值
public Function getEnvKeyValue(keyName)
    Set oShell = CreateObject("WScript.Shell")
    Set oEnv = oShell.Environment("USER")

    getEnvKeyValue = oEnv(keyName)
end Function


dim result
result = getEnvKeyValue("OneDrive")
print result

在这里插入图片描述

在这里插入图片描述

setEnvKeyValue - 新建或修改某个环境变量值

vbs">'修改新建某个环境变量值
public Function setEnvKeyValue(keyName, keyValue)
    Set oShell = CreateObject("WScript.Shell")
    Set oEnv = oShell.Environment("USER")

    oEnv(keyName) = keyValue
end Function

setEnvKeyValue "OneDrive2", "C:\Users\Administrator\OneDrive"

在这里插入图片描述

Windows常用内置对象

系统对象使用的文档(可直接参考微软的VBA文档):https://learn.microsoft.com/en-us/office/vba/api/overview/

文件对象:Scripting.FileSystemObject

vbs">Public Function print(message)
    Set stdout=CreateObject("Scripting.FileSystemObject").GetStandardStream(1)
    stdout.WriteLine message
End Function

public function getArraySize(nums)
    getArraySize = UBound(nums) - LBound(nums) + 1
end function

public Function execCmd(cmd)
    dim result
    ' 创建WScript.Shell对象
    Set objShell = CreateObject("WScript.Shell")

    ' 执行cmd命令,这里以"ipconfig /all"为例
    Set objExecObject = objShell.Exec("cmd /c "&cmd)

    ' 读取命令执行的结果
    Do While Not objExecObject.StdOut.AtEndOfStream
        result = objExecObject.StdOut.ReadAll()
    Loop

    execCmd = result

end Function



Set oShell = CreateObject("WScript.Shell")

Set oFS = CreateObject("Scripting.FileSystemObject")

'读取文本文件,并打印出来到控制台
dim file,fileContent,currentRowContent
file = "D:\workspace\personal\selenium-test\src\main\java\work\linruchang\vbsFile\1.txt"
Set oFile = oFS.OpenTextFile(file, 1, 0)
do until oFile.AtEndOfStream
    currentRowContent = oFile.ReadLine
    fileContent = fileContent & currentRowContent & vbLf
loop
oFile.Close

print fileContent


在这里插入图片描述

在这里插入图片描述

系统环境变量对象:USER

vbs">
'打印日志
Public Function print(message)
    Set stdout=CreateObject("Scripting.FileSystemObject").GetStandardStream(1)
    stdout.WriteLine message
End Function

'获取某个环境变量值
public Function getEnvKeyValue(keyName)
    Set oShell = CreateObject("WScript.Shell")
    Set oEnv = oShell.Environment("USER")

    getEnvKeyValue = oEnv(keyName)
end Function


dim result
result = getEnvKeyValue("OneDrive")
print result


'修改新建某个环境变量值
public Function setEnvKeyValue(keyName, keyValue)
    Set oShell = CreateObject("WScript.Shell")
    Set oEnv = oShell.Environment("USER")

    oEnv(keyName) = keyValue
end Function

setEnvKeyValue "OneDrive2", "C:\Users\Administrator\OneDrive2"

print(getenvkeyvalue("OneDrive2"))

在这里插入图片描述

在这里插入图片描述


http://www.niftyadmin.cn/n/5665674.html

相关文章

SOMEIP_ETS_117: SD_Entry_references_options_of_same_kind

测试目的&#xff1a; 验证DUT能够处理一个包含两种相同类型选项的SubscribeEventgroup消息&#xff0c;DUT可以选择拒绝订阅尝试或忽略该请求。 描述 本测试用例旨在确保DUT遵循SOME/IP协议&#xff0c;当接收到一个包含重复相同类型选项的SubscribeEventgroup消息时&#…

树——数据结构

这次我来给大家讲解一下数据结构中的树 1. 树的概念 树是一种非线性的数据结构&#xff0c;它是由n(n>0&#xff09;个有限结点组成一个具有层次关系的集合。 叫做树的原因&#xff1a;看起来像一棵倒挂的树&#xff0c;根朝上&#xff0c;叶朝下。 特殊结点&#xff1a…

redis中的5中数据结构

redis 中键都是字符串类型 所说的5中数据结构指定的是值的结构 1、String 单只存储&#xff08;存一个具体值&#xff0c;也可以存储一个java中的对象&#xff0c;对象是被序列化成json格式的字符串&#xff09; set key value&#xff1a;设定键值 get key&#xff1a;获取键…

在交互式系统中,非剥夺是不是一个好的策略?为什么?

非剥夺方式:分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生某事件而阻塞时,才把处理机分配给另一个进程。 剥夺方式:当一个进程正在运行时,系统可以基于某种原则,剥夺已分配给它的处理机,将之分配给其它进程。剥夺原则有:优先权原则、短进程、优先…

【限流算法】

文章目录 介绍算法原理适用场景令牌通算法实现限流算法 介绍 令牌桶算法是网络流量整形&#xff08;Traffic Shaping&#xff09;和速率限制&#xff08;Rate Limiting&#xff09;中最常使用的一种算法。典型情况下&#xff0c;令牌桶算法用来控制发送到网络上的数据的数目&a…

人工智能 | 基于ChatGPT开发人工智能服务平台

简介 ChatGPT 在刚问世的时候&#xff0c;其产品形态就是一个问答机器人。而基于ChatGPT的能力还可以对其做一些二次开发和拓展。比如模拟面试功能、或者智能机器人功能。 模拟面试功能包括个性化问题生成、实时反馈、多轮面试模拟、面试报告。 智能机器人功能提供24/7客服支…

828华为云征文|华为云Flexus X实例docker部署Rocket.Chat构建属于自己的团队通讯协作平台

828华为云征文&#xff5c;华为云Flexus X实例docker部署Rocket.Chat构建属于自己的团队通讯协作平台 华为云最近正在举办828 B2B企业节&#xff0c;Flexus X实例的促销力度非常大&#xff0c;特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务…

如何切换淘宝最新镜像源(npm)【2024版】

在使用 Node.js 和 npm 进行开发时&#xff0c;大家通常会遇到 npm 源速度较慢的问题。特别是当你需要安装大量依赖时&#xff0c;npm 官方源的速度可能不尽如人意。幸运的是&#xff0c;淘宝提供了一个更快速的 npm 镜像源&#xff0c;可以让你更快地下载和安装包。本文将介绍…