91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

BAT腳本的一些技巧寫法

發布時間:2020-07-15 14:50:19 來源:網絡 閱讀:800 作者:tangjiashiertui 欄目:系統運維

我以前一直以為bat不能像Linux的shell一樣設置函數并且調用,事實上我發現這是可以的。不過由于批處理的特性是一行一行執行的,這種label的函數必須要寫在文本的最后。如果寫在了批處理命令的前面,bat會逐行運行里面的命令的。寫在文檔的最后面,并且在“函數區域”前跳過這些代碼。

(順便吐槽一下,這種函數的寫法和linux的shell很不一樣,shell的function中的命令必須寫在命令的前面,讓shell逐行運行一次,才能在后面的命令中被人調用。)


函數的寫法:

::在這個例子中我試圖寫的一個函數起名為testfunction,它的操作就是運行一個echo命令。

::使用call命令,并且在后面寫入函數名,函數名的前方寫一個:代表這是一個label。

call :testfunction



::這個goto命令讓批處理在運行的時候跳過所有函數的部分。

goto EOF


::從下面一行開始就是函數的部分,它們應該是bat腳本的最后部分,理論上不應該在下方再寫任何的命令了。首先如同goto的命令一樣,首先要先寫一個lable

:testfunction

echo Test function is running.

rem exit /b 會讓程序跳轉到調用函數的命令處,而不是直接退出程序。

exit /b


:EOF

::以上就是示例腳本的所有內容。


當然你可以不把函數內容寫在這個bat中,而是另外寫一個bat文件,然后call這個bat的絕對路徑,那也是可以的。為了方便我就暫時稱呼我運行的腳本名字為a.bat,而調用的腳本為b.bat。

a.bat的內容是。

set a=aaa

call b.bat

echo %b%

pause

而b.bat的內容是

echo %a%

set b=bbb

在這兩個腳本中a腳本和b腳本各自定義了一個變量,而沒有定義另外一個腳本中定義的變量,但是echo的又互相是對方腳本中定義的變量。如果只有單獨的腳本,兩個腳本的echo命令是返回不了任何內容的。但是如果你運行了a腳本并且調用了b腳本,可以發現,call調用的腳本之間的變量是可以互通的。不過腳本之間的goto的label不能互通,即你不能在a腳本中goto到b的一個label中去。

而且不能不寫call命令,如果不寫而是直接寫b腳本的路徑,bat依舊可以運行,不過運行完b腳本之后,整個批處理就退出了。例如我們將a腳本中的call b.bat中的call去掉,那么腳本只會打印變量a的值,然后賦值變量b,但是不回會到a腳本再次打印b的值。



通過set /p 命令去獲取另外一個文本文件里的值

寫法是:

set /p var=<c:\path\to\file.txt

這樣file.txt里的值就到了var這個變量里去了,不過這個寫法要求txt只有一行,如果有多行,那么也只會取第一行的內容。


那如果想要其他的行,那么這個就要用到for循環了。通過for循環可以讀取文本文件(或一個命令的結果)每一行的特性,將一行的內容賦值到一個變量里,不過如果光寫for循環而不使用計數器的話,那么變量的值會被反復覆蓋,僅保留最后一行的值。

set num=0

for /f "tokens=1" %%i in ('wmic LogicalDisk where "Caption='C:'" get Size ^| find /v /i "size"') do (

set /a num=!num!+1

if !num!==1 (set C_size=%%i)

)

要注意的是計數器由于是不停的變化的,因此要用延時變量,用!包起來而不是%,而for循環的變量是%%連續兩個百分號表示的。如果輸入的命令中有管道命令|,要用轉移符^轉譯。

for的token參數可以決定一行根據指定的分隔符(默認是空格)分割成幾段,取第幾段。如果你寫的是表格的話,那就是第幾列,而num計數器可以在if里找行。這樣的話這個循環就能取出列和行中的指定數據,賦值到一個變量里。



在bat中調用vbs。

當然本身的命令是非常簡單的直接call就可以了,call xxx.vbs

不過這里要說的是將bat中的一些變量的值傳遞到vbs中去,

文件里調用

例如:

在bat中

set a=testmessage

call b.vbs /messageargs:%a%

在vbs中用

set wshnamed=wscript.arguments.named

msgbox wshnamed.item("messageargs")

這樣的寫法來獲取bat變量。


以管理員身份運行bat

%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

红安县| 阿尔山市| 普宁市| 宣威市| 武宁县| 抚宁县| 鹤岗市| 高碑店市| 唐山市| 峨眉山市| 武宁县| 黎平县| 株洲县| 伊吾县| 肇东市| 龙川县| 南和县| 金坛市| 蒙阴县| 平顶山市| 玛曲县| 台中县| 辽阳县| 新民市| 二连浩特市| 乌兰察布市| 汉源县| 济源市| 苗栗县| 剑阁县| 襄城县| 靖江市| 平罗县| 登封市| 秦皇岛市| 紫金县| 恭城| 北碚区| 平泉县| 莱州市| 醴陵市|