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

news2024/9/20 8:32:58

文章目录

    • 概述
    • 执行脚本
    • 语法
      • 转义字符
      • 文本弹框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:控制台应用程序,运行时会有一个命令行窗口,输出被发送到这个窗口

语法

转义字符

'换行符 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

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

在这里插入图片描述

定义变量dim(普通类型)

dim name
name="lrc"

msgbox name

在这里插入图片描述

定义接收对象set

Set oFS = CreateObject("Scripting.FileSystemObject")

字符拼接&

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

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

在这里插入图片描述

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

格式: if then elseif then else then end if

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




在这里插入图片描述

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

有容量无元素
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)

在这里插入图片描述

基于元素确定容量
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

在这里插入图片描述

循环、迭代

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
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

在这里插入图片描述

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 - 控制台打印

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

print "fsfsdf"

在这里插入图片描述

getArraySize - 获取数组长度

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命令

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 - 读取文件内容

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 - 获取某个环境变量值

'打印日志
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 - 新建或修改某个环境变量值

'修改新建某个环境变量值
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

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


'打印日志
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.coloradmin.cn/o/2144946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解密.bixi、.baxia勒索病毒:如何安全恢复被加密数据

导言 在数字化时代&#xff0c;数据安全已成为个人和企业面临的重大挑战之一。随着网络攻击手段的不断演进&#xff0c;勒索病毒的出现尤为引人关注。其中&#xff0c;.bixi、.baxia勒索病毒是一种新型的恶意软件&#xff0c;它通过加密用户的重要文件&#xff0c;迫使受害者支…

Java-数据结构-优先级队列(堆)-(一) (;´д`)ゞ

文本目录&#xff1a; ❄️一、优先级队列&#xff1a; ➷ 1、概念&#xff1a; ❄️二、优先级队列的模拟实现&#xff1a; ➷ 1、堆的概念&#xff1a; ➷ 2、堆的性质&#xff1a; ➷ 3、堆的创建&#xff1a; ▶ 向下调整&#xff1a; ➷ 4、堆的插入和删除&#xff1a; …

Java 值传递与引用传递

以下是包含引用的完整博客文章&#xff0c;以markdown格式输出&#xff0c;附带“Java 只有值传递”的相关参考来源。 Java 是一种广泛使用的面向对象编程语言&#xff0c;但对于值传递&#xff08;pass by value&#xff09;和引用传递&#xff08;pass by reference&#xff…

只有公网IP地址可以申请SSL证书吗?

是的&#xff0c;只有公网IP地址可以申请SSL证书。这是因为SSL证书主要用于加密互联网上的数据传输&#xff0c;确保通信的安全性和数据的完整性。而公网IP地址是互联网通信的核心&#xff0c;具有全球唯一性&#xff0c;允许互联网上的用户通过它们访问互联网上的资源。 具体…

北森笔试测评之言语理解到底难不难

前篇笔记我提到过&#xff0c;言语理解是最难的&#xff0c;有同学质疑了。言语我都会做呀&#xff0c;甚至有的可以搜到&#xff0c;而图标和图形我有的不会。这里需要指出&#xff0c;会做不等于作对&#xff0c;可以回顾到高中甚至初中的时候&#xff0c;感觉做的好的一般都…

dcmtk的自动输入数据纠错模式对DICOMDIR读取的影响

软件版本 dcmtk 3.6.7 自动纠错的全局变量 输入数据的自动纠错是一个全局变量&#xff0c;定义在dcmtk/dcmdata/dcobject.h中&#xff0c;如下所示&#xff1a; /** This flags defines whether automatic correction should be applied to input* data (e.g.\ stripping …

【多视图学习】基于多视图信息瓶颈的鲁棒表示学习

论文链接 代码链接 0.论文摘要和信息 摘要 信息瓶颈原理为表示学习提供了一种信息论方法&#xff0c;通过训练编码器来保留与预测标签相关的所有信息&#xff0c;同时最小化表示中的其他过量信息的量。然而&#xff0c;原始配方需要标记数据来识别多余的信息。在这项工作中&…

【C++ Primer Plus习题】16.8

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream> #include <set> #includ…

Android 15 正式发布至 AOSP

Google官方宣布&#xff0c;将于近期发布了 Android 15&#xff0c;而在早些时候&#xff0c;Google已经将其源代码推送至 Android 开源项目 (AOSP)。未来几周内&#xff0c;Android 15 将在受支持的 Pixel 设备上正式推出&#xff0c;并将于今年晚些时候在三星、Honor、iQOO、…

easy_cloudantivirus

0x00前言 必须安装在virtualbox 攻击机&#xff1a;kali 靶机 easy_cloudantivirus 链接&#xff1a; https://www.vulnhub.com/entry/boredhackerblog-cloud-av,453/ 0x01信息搜集 经过测试发现靶场IP为192.168.56.106 进一部对IP搜集信息 发现8080端口youhttp服务。…

MySQL系列—12.Undo log

1、概念 DML 操作导致数据变化 , 将变化前的记录写入 Undo 日志。 作用 用于记录更改前的一份 copy &#xff0c;在操作出错时&#xff0c;可以用于回滚、撤销还原&#xff0c;只将数据库 逻辑地恢复到原来的样子 你 插入一条记录时&#xff0c;至少要把这条记录的主键值记下来…

上汽集团社招入职SHL测评:语言理解及数字推理高分攻略、真题题库

上汽集团社招待遇 上汽集团作为国内领先的汽车制造企业&#xff0c;其社招待遇和面试问题一直是求职者关注的焦点。以下是根据最新信息整理的上汽集团社招待遇及面试问题概览&#xff1a; 工资待遇&#xff1a;上汽集团的工资待遇在国内汽车行业中属于较高水平。根据不同职位和…

【C++二叉树】236.二叉树的最近公共祖先

236. 二叉树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; 思路分析&#xff1a; 公共祖先满足的特征&#xff1a; p是q的孩子&#xff0c;则q是祖先&#xff0c;反之亦然。p和q是“我”的左子树和右子树中的节点&#xff0c;则“我”是祖先。&#xff08;如题目中给…

物联网——USART协议

接口 串口通信 硬件电路 电平标准 串口参数、时序 USART USART主要框图 TXE: 判断发送寄存器是否为空 RXNE: 判断接收寄存器是否非空 RTS为输出信号&#xff0c;用于表示MCU串口是否准备好接收数据&#xff0c;若输出信号为低电平&#xff0c;则说明MCU串口可以接收数据&#…

springboot实训学习笔记(5)(用户登录接口的主逻辑)

接着上篇博客学习。上篇博客是已经基本完成用户模块的注册接口的开发以及注册时的参数合法性校验。具体往回看了解的链接如下。 springboot实训学习笔记&#xff08;4&#xff09;(Spring Validation参数校验框架、全局异常处理器)-CSDN博客文章浏览阅读576次&#xff0c;点赞7…

NANO 9K玩转RISCV之ARDUINO开发环境

一、前言 在从0-1探索RISCV指令集的路上&#xff0c;我们用百元不到的NANO 9K开发板一步步的实现&#xff1a;  &#xff11;&#xff09;最小的内核架构 &#xff12;&#xff09;取值&#xff0c;译码和执行的过程&#xff08;电路实现ISA指令集&#xff09; &#xff1…

使用神经网络拟合6项参数

使用神经网络拟合6项参数 1. 数据预处理1.1 添加参数解析1.2 数据预处理逻辑1.3 数据归一化及划分1.4 数据标签处理逻辑1.5 数据转torch 2. 定义model2.1 CNN_LSTM2.2 Transformer 3. 定义train脚本3.1 loss和optimizer3.2 train3.3 predict 1. 数据预处理 1.1 添加参数解析 …

Vue+nodejs+express汽车配件商城销售管理系统 i9cgz

目录 技术栈具体实现截图系统设计思路技术可行性nodejs类核心代码部分展示可行性论证研究方法解决的思路Express框架介绍源码获取/联系我 技术栈 该系统将采用B/S结构模式&#xff0c;开发软件有很多种可以用&#xff0c;本次开发用到的软件是vscode&#xff0c;用到的数据库是…

动态分析基础

实验一 Lab03-01.exe文件中发现的恶意代码 问题&#xff1a; 1.找出这个恶意代码的导入函数与字符串列表? 2.这个恶意代码在主机上的感染迹象特征是什么? 3.这个恶意代码是否存在一些有用的网络特征码?如果存在&#xff0c;它们是什么? 解答&#xff1a; 1.找出这个恶意代…

上调铁矿石产量预期后,淡水河谷股价能否重振?

猛兽财经的核心观点&#xff1a; &#xff08;1&#xff09;尽管市场面临挑战&#xff0c;但淡水河谷(VALE)还是上调了2024年的铁矿石产量预期。 &#xff08;2&#xff09;第二季度业绩喜忧参半;收入减少&#xff0c;但铁矿石出货量却很强劲。 &#xff08;3&#xff09;投资者…