中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

临澧县| 辉县市| 榆中县| 金乡县| 洛南县| 治县。| 延津县| 航空| 营山县| 香河县| 桑植县| 谢通门县| 闽清县| 桂平市| 玉树县| 定襄县| 安阳县| 石门县| 潢川县| 四会市| 大足县| 砚山县| 北海市| 横山县| 资中县| 吉安县| 讷河市| 安泽县| 那坡县| 舟山市| 贵南县| 九龙坡区| 凤台县| 伊通| 浦北县| 土默特左旗| 吉木萨尔县| 鲁甸县| 乡宁县| 弋阳县| 吉首市|