客圈了解我的人都知道,我對VBS編程有很深入的了解的??赡苡幸恍┳x者不太明白,VBS編程倒底怎么寫,我簡單來教一下大家。你在桌面新建一個文本文檔,內容里寫上:msgbox "hello,world",并且保存為1.vbs。(圖1、圖2)哪么你雙擊你保存的1.vbs,就會彈出“hello,word”的樣式了,恭喜你,你已經會VBS編程了。
圖1
圖2
但我說的不是這些,我說的是VBS編程里最煩人的WMI編程。我相信我這篇教程,有點VBS基礎的男生看了,你5分鐘立馬WMI編程入門。其實這部分編程,不光是VBS里的相關知識,你以后學C、C++、PYTHON、RUBY、C#,總之一切的編程,你都會碰上我講的概念,而且作為男生立馬你就懂了,我只不不過拿VBS來舉例而已。
第一,什么是命名空間。有部份教程也把它叫作域的。其實命名空間很簡單,用一個世界來舉例,那么日本、中國、法國這些名字就是命名空間,你把它當作地域就好理解了。
第二,什么是類。從第一繼承下來,如果命名空間里有日本的話,那日本人就是一個類了。當然,中國也是一個命名空間,那么中國人也是一個類。
第三,什么是類的實例。日本人是一個類,那么日本女▽▽優、日本男▽▽優就是類的實例集合。日本女優里的高▽▽樹瑪利亞、或者松島▽▽楓就是單獨一個類的實例。
第四,類的實例(也可以說類的集合)的方法和屬性。像日本女▽▽優都有的屬性:她們是女的、都有名字等等。那么日本女▽▽優的方法有:咬、Ru▽▽▽J、Chao▽▽▽P等。
WMI的腳本程序流程類似就是在不同的命名空間建立不同的類對象,然后根據類對象再建立類實例集合對象,最后在類實例集合對象里例舉每個實例的方法屬性。好比在日本這個命名空間里建立一個的日本人這個類對象,然后根據日本人這個類對象再建立日本女▽▽優的實例集合對象,最后在這個類集合對象里去查找每個日本女▽▽優,看下日本女▽▽優的名字、相貌,和做▽▽▽愛的方法等等。
可能有人對我的表達方法有疑義。我再補充一下,命名空間和類這些東東都是抽象的定義,我把它們實例化了。你也可以單獨把日本女▽▽優做為一個命名空間,那么拍女▽▽同的做為一個類,都是可以的。
舉一個最簡單的例子吧:
strComputer=“.”
Set objWMIService=GetObject(“winmgmts:\” & strComputer & “\root\CIMV2”)
‘第二句是建立一個類對象objWMIService,代表日本人。這個對象是如何建立的呢?就是連接到世界里的日本命名空間。第一句里的strComputer代表世界,就是你的機器了。root\CIMV2就是命名空間,相當于日本。winmgmts:\是固定的,微軟要求這么寫。
Set colItems=objWMIService.ExecQuery( _
“SELECT * FROM CIM_DataFile”,,48)
‘再建立一個類實例集合對象colItems, 代表女▽▽優的集合。這個對象就是再在日本人這個類對象(objWMIService)里找日本女▽▽優(CIM_DataFile)的集合.。當然如果你sql查詢語句詳細一點,可以直接找到女優里的高樹瑪▽▽利亞。就是單獨一個類實例了。
For Each objItem in colItems
Wscript.Echo “———————————–”
Wscript.Echo “CIM_DataFile instance”
Wscript.Echo “———————————–”
Wscript.Echo “Caption: ” & objItem.Caption
Next
'這個循環就是在類實例集合對象colItems(代表日本女▽▽優的集合對象)里例舉日本女▽▽優的名字、相貌等等。
頭條的讀者們,我已經最大化詳解的介紹了VBS里的WMI編程了。如果你會一點點vbs編程的話,或是你正在上大學學習過VB、C、的話,我相信我會給你啟發的,特別是男生,如果有興趣的話,我會給你介紹 男生五分鐘入門wmi(二)的。
另外,我在這里講一下,黑客界的有名的ID:海陽頂端、海洋頂端、LCX、VBS小鋪,都是我,都是同一個人。現在我換了一個平臺,入駐,希望大家希望繼續關注我。和我以前的百度BLOG、我自建的海陽頂端網風格都不同,在這里我會寫一些大家都通俗易懂的黑客知識,對你們有一點點幫助,我就心滿意足了。
第一章. 簡介和基礎命令
1.1 介紹cmd/dos腳本語言的概念和基本語法
1.2 講解常用的基礎命令和參數,如echo、dir、cd等
第二章. 變量和運算符
2.1 講解變量和常量的定義和使用方法
2.2 介紹不同類型的運算符和運算規則
第三章. 控制流程和條件語句
3.1 介紹if、else、for、while等控制語句的用法
3.2 講解條件語句的語法和應用場景
第四章. 函數和參數傳遞
4.1 講解如何定義和調用函數以及傳遞參數
4.2 介紹函數的作用域和遞歸調用
第五章. 文件操作
5.1 講解如何創建、讀取、寫入和刪除文件
5.2 介紹文件操作的常用命令和參數,如copy、del、type等
第六章. 環境變量和系統信息
6.1 介紹環境變量的概念和設置方法
6.2 講解如何獲取系統信息,如系統時間、用戶名等
第七章. 網絡通信和遠程控制
7.1 介紹如何使用cmd/dos腳本語言進行網絡通信
7.2 講解如何使用遠程控制命令,如telnet、net等
第八章. 錯誤處理和調試技巧
8.1 介紹常見的錯誤類型和處理方法
8.2 講解如何使用調試工具和技巧
第九章. 腳本編寫和調試實戰
9.1 提供一些實際案例,讓讀者通過編寫和調試腳本來加深理解和掌握技能
9.2 講解如何測試和優化腳本性能
第十章. 其他高級主題和擴展
10.1 講解其他高級主題,如正則表達式、批處理、交互式命令等
10.2 介紹如何擴展和定制cmd/dos腳本語言的功能和特性
第十章. 其他高級主題和擴展
10.1 講解其他高級主題,如正則表達式、批處理、交互式命令等
10.2 介紹如何擴展和定制cmd/dos腳本語言的功能和特性
一、正則表達式
正則表達式是一種用來匹配字符串的表達式,可以在文本處理工具中使用,也可以在批處理腳本中使用。下面介紹如何在批處理腳本中使用正則表達式。
1. 使用findstr命令
findstr命令是Windows系統中自帶的一個命令行工具,可以用來查找文件中的字符串。在批處理腳本中,可以使用findstr命令來匹配字符串,并輸出匹配的行。例如:
```
@echo off
setlocal
set pattern=Hello
findstr /r /c:"%pattern%" example.txt
```
在上面的腳本中,使用findstr命令匹配文件example.txt中包含字符串"Hello"的所有行,并輸出這些行。
需要注意的是,findstr命令使用的是正則表達式的語法,可以使用一些特殊字符和元字符來匹配字符串。例如:
- .:匹配任意單個字符。
- *:匹配前一個字符的零個或多個副本。
- ^:匹配行的開始。
- $:匹配行的結尾。
2. 使用PowerShell
PowerShell是一種命令行腳本語言,支持正則表達式的語法。在PowerShell中,可以使用正則表達式來匹配字符串,并輸出匹配的結果。例如:
```
$pattern="Hello"
Get-Content example.txt | Select-String -Pattern $pattern
```
在上面的腳本中,使用Select-String命令匹配文件example.txt中包含字符串"Hello"的所有行,并輸出這些行。
需要注意的是,PowerShell的正則表達式語法和findstr命令略有不同,具體可以參考官方文檔。
二、批處理
批處理是一種自動化執行任務的腳本語言,可以在Windows系統中使用。下面介紹批處理中的一些高級主題。
1. 使用變量和參數
在批處理腳本中,可以使用變量存儲和操作數據,也可以使用參數來傳遞數據。例如:
```
@echo off
setlocal
set name=John
echo Hello %name%!
```
在上面的腳本中,使用變量name存儲名字"John",然后輸出"Hello John!"。還可以使用參數來傳遞數據,例如:
```
@echo off
setlocal
echo Hello %1!
```
在上面的腳本中,使用%1表示第一個參數,然后輸出"Hello"加上第一個參數的值。
2. 使用if語句
在批處理腳本中,可以使用if語句來進行條件判斷。例如:
```
@echo off
setlocal
set age=18
if %age% GEQ 18 (
echo You are an adult.
) else (
echo You are a child.
)
```
在上面的腳本中,使用if語句判斷年齡是否大于等于18歲,如果是,則輸出"You are an adult.",否則輸出"You are a child."。
3. 使用for循環
在批處理腳本中,可以使用for循環來遍歷數組或文件等數據。例如:
```
@echo off
setlocal
for /f "tokens=*" %%a in (example.txt) do (
echo %%a
)
```
在上面的腳本中,使用for循環遍歷文件example.txt中的所有行,并輸出這些行。
4. 使用goto語句
在批處理腳本中,可以使用goto語句來跳轉到指定的標簽處。例如:
```
@echo off
setlocal
set /p age=Enter your age:
if %age% LSS 18 (
goto underage
) else (
goto adult
)
:underage
echo You are a child.
goto end
:adult
echo You are an adult.
goto end
:end
```
在上面的腳本中,使用goto語句根據年齡的大小跳轉到不同的標簽處,并輸出相應的信息。
需要注意的是,過多使用goto語句可能會導致代碼難以理解和維護,應該盡量避免使用。
三、交互式命令
交互式命令是指在腳本運行過程中,用戶可以輸入命令或數據,然后腳本根據輸入執行相應的操作。下面介紹如何在批處理腳本中實現交互式命令。
1. 使用set /p命令
set /p命令可以讓用戶輸入數據,并將輸入的數據保存到變量中。例如:
```
@echo off
setlocal
set /p name=Enter your name:
echo Hello %name%!
```
在上面的腳本中,使用set /p命令讓用戶輸入名字,然后輸出"Hello"加上名字的值。
2. 使用choice命令
choice命令可以讓用戶選擇從一個菜單中選擇一個選項,并將選擇的結果保存到變量中。例如:
```
@echo off
setlocal
choice /c abc /m "Choose a letter:"
if errorlevel 3 (
echo You chose c.
) else if errorlevel 2 (
echo You chose b.
) else (
echo You chose a.
)
```
在上面的腳本中,使用choice命令讓用戶從選項a、b、c中選擇一個選項,然后根據選擇的結果輸出相應的信息。
需要注意的是,choice命令只能在Windows 2000及以上版本的系統中使用。
四、總結
本文介紹了在cmd和dos腳本語言編程中的一些高級主題,包括正則表達式、批處理、交互式命令等。這些主題可以讓腳本更加靈活和強大,幫助程序員更好地完成任務。需要注意的是,這些主題都需要一定的學習和掌握,程序員應該在實踐中不斷學習和提高。
CMD和DOS腳本語言是Windows系統自帶的腳本語言,可以用來自動化執行任務、進行系統管理等。雖然這兩種腳本語言已經具有很多功能和特性,但是有時候需要擴展和定制這些功能和特性,以滿足某些特定的需求。本文將介紹如何擴展和定制CMD和DOS腳本語言的功能和特性,包括自定義函數、調用外部程序、使用第三方庫等。
一、自定義函數
自定義函數是指在腳本中自己定義一些函數,以便在需要的時候調用。在CMD和DOS腳本語言中,可以使用goto語句和標簽來實現函數的調用。例如:
```
@echo off
setlocal
call :myfunction "Hello"
exit /b
:myfunction
echo %1
exit /b
```
在上面的腳本中,定義了一個名為myfunction的函數,使用%1表示第一個參數,并輸出第一個參數的值。在腳本中使用call命令調用該函數,并傳遞"Hello"作為參數。
需要注意的是,在CMD和DOS腳本語言中沒有函數的概念,自定義函數實際上是通過goto語句和標簽來實現的。因此,需要小心使用goto語句,避免出現無限循環的情況。
二、調用外部程序
在CMD和DOS腳本語言中,可以通過調用外部程序來擴展和定制腳本的功能。例如,可以調用命令行工具或其他程序來完成某些任務,例如壓縮和解壓縮文件、執行數據庫操作、進行網絡操作等。
調用外部程序可以使用start、call或者直接使用程序名等方式。例如:
```
@echo off
setlocal
start notepad.exe
call C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql.exe -u root -p mysql < C:\temp\test.sql
exit
```
在上面的腳本中,使用start命令打開記事本程序,使用call命令調用MySQL的命令行工具,執行一個SQL文件。
需要注意的是,調用外部程序可能會導致腳本的執行速度變慢或者出現異常情況。因此,在調用外部程序時需要小心處理異常情況,例如判斷程序是否存在、參數是否正確等。
三、使用第三方庫
使用第三方庫可以擴展和定制腳本的功能和特性。在CMD和DOS腳本語言中,可以使用PowerShell、Python等腳本語言,或者使用Windows API、WMI等Windows系統提供的接口來進行操作。
例如,在CMD和DOS腳本語言中使用PowerShell,可以實現對XML、JSON等數據格式的處理,以及調用其他程序等功能。例如:
```
@echo off
setlocal
powershell -command "Get-ChildItem C:\temp | Where-Object { $_.Extension -eq '.txt' } | ForEach-Object { $_.Name }"
exit
```
在上面的腳本中,使用PowerShell命令獲取C:\temp目錄下的所有txt文件,并輸出文件名。
需要注意的是,使用第三方庫需要先安裝相應的軟件或者庫,并且需要了解相應的語言或者接口。因此,在使用第三方庫時需要先進行一定的學習和掌握。
此外,還有一些其他的擴展和定制腳本的技術,例如使用環境變量、重定向輸入輸出、使用PowerShell cmdlet等,這里簡單介紹一下。
1. 使用環境變量
環境變量是一種可以在系統中存儲值的機制,可以通過腳本讀取和設置環境變量的值。在CMD和DOS腳本語言中,可以使用set命令來設置環境變量的值,例如:
```
@echo off
setlocal
set myvar=hello
echo %myvar%
```
在上面的腳本中,使用set命令設置myvar環境變量的值為"hello",并在腳本中輸出該環境變量的值。
使用環境變量可以方便地在腳本中共享數據,例如設置路徑、存儲配置信息等。
2. 重定向輸入輸出
重定向輸入輸出是指將命令的輸入和輸出重定向到文件中或者其他命令中。在CMD和DOS腳本語言中,可以使用>、>>、<等符號來實現重定向。例如:
```
@echo off
setlocal
echo hello > C:\temp\test.txt
type C:\temp\test.txt
```
在上面的腳本中,使用echo命令輸出"hello"并將其重定向到C:\temp\test.txt文件中,然后使用type命令輸出該文件中的內容。
使用重定向可以方便地對命令的輸入和輸出進行處理,例如將命令的輸出保存到文件中、將文件內容作為命令的輸入等。
3. 使用PowerShell cmdlet
PowerShell cmdlet是一種可以在PowerShell中使用的命令,可以方便地完成一些操作,例如獲取系統信息、管理文件等。在CMD和DOS腳本語言中,可以使用PowerShell命令來調用cmdlet。例如:
```
@echo off
setlocal
powershell -command "Get-Process | Select-Object -Property ProcessName, Id, CPU | Sort-Object -Property CPU -Descending | Select-Object -First 5"
```
在上面的腳本中,使用PowerShell命令獲取系統中CPU占用最高的5個進程,并輸出這些進程的名稱、ID和CPU占用率。
使用PowerShell cmdlet可以方便地完成一些復雜的操作,例如操作文件、管理系統等。
總之,CMD和DOS腳本語言雖然已經具有很多功能和特性,但是還可以通過自定義函數、調用外部程序、使用第三方庫、使用環境變量、重定向輸入輸出、使用PowerShell cmdlet等技術來擴展和定制腳本的功能和特性。需要根據具體的需求和場景來選擇適合的技術,以便更好地完成任務。