国产粉嫩无码不卡在线观看,酒店大战丝袜高跟鞋人妻,特级精品毛片免费观看,欧美亚洲日本国产综合在线

aardio + bat 批處理混合編程,制作漂亮圖形界面(批處理編程教程)

aardio 小、輕、快,專注于 Windows 桌面軟件快速開發(fā)。在 aardio 中可以調(diào)用很多編程語言,例如 C語言、C 、C#、Java、Python、R、Javascript、Node.Js、Fortran、VB、Flash ActionScript、PHP、VBScript、PowerShell、NewLISP、AutoLISP、Delphi、FreeBASIC、Ruby、Rust、Julia、Nim、Go 語言、批處理 …… 請參考《 aardio 調(diào)用第三方編程語言示例》。

本文我們主要介紹 aardio bat 批處理混合編程。

一、aardio bat 入門

請在 aardio 中點擊「主菜單 > 新建工程 > 窗口程序 > 批處理」創(chuàng)建批處理范例工程。

aardio + bat 批處理混合編程,制作漂亮圖形界面(批處理編程教程)

生成的范例初始代碼很簡單,我們在工程中雙擊打開程序入口代碼 main.aardio ,然后點擊運行,運行效果如下:

aardio + bat 批處理混合編程,制作漂亮圖形界面(批處理編程教程)

代碼很簡單,我們重點說一下啟動批處理的關(guān)鍵代碼:

var prcs = process.batch("batbat.aardio",{ exepath = io._exepath; //傳遞命名參數(shù) "批處理啟動參數(shù)1"; //批處理使用 %1 接收第一個參數(shù) "批處理啟動參數(shù)2"; //批處理使用 %2 接收第一個參數(shù)})

process.batch() 函數(shù)用于啟動批處理,返回一個進(jìn)程管道對象。如果需要優(yōu)先執(zhí)行 64 位命令 —— 請改為 process.batch.wow64(),其他用法一樣。

先看參數(shù) @1 指定的 bat 文件路徑參數(shù), aardio 中文件路徑「首字符」可以用一個單斜桿(或反斜桿)表示應(yīng)用程序根目錄,應(yīng)用程序根目錄在開發(fā)時指工程目錄或工程外獨立啟動的文件所在目錄,發(fā)布后指 EXE 所在目錄。

而 aardio 工程中的目錄可以指定為「內(nèi)嵌資源」,也就是將該目錄下面的文件編譯到 EXE 資源內(nèi)。aardio 中很多文件有關(guān)的函數(shù)都自動兼容資源文件,代碼不需要修改,上面的 "batbat.aardio" 就是一個資源文件。

aardio + bat 批處理混合編程,制作漂亮圖形界面(批處理編程教程)

"batbat.aardio" 的文件后綴改成 *.bat 后綴也是可以的,不過使用 *.aardio 后綴可以直接在 aardio 中編輯。我們可以右鍵點擊 "batbat.aardio",然后在彈出菜單中點擊「跳轉(zhuǎn)到文件」:

aardio + bat 批處理混合編程,制作漂亮圖形界面(批處理編程教程)

打開的批處理代碼如下:

aardio + bat 批處理混合編程,制作漂亮圖形界面(批處理編程教程)

注意綠色部分是批處理代碼,我們可以在批處理中編寫 aardio 代碼,遵守類PHP的 aardio 模板語法即可 —— 也就是將 aardio 代碼置入 <? ?> 模板標(biāo)記就可以了。

aardio + bat 批處理混合編程,制作漂亮圖形界面(批處理編程教程)

aardio將 <? ….. ?> 之外的部分解析為: print("批處理代碼") 以調(diào)用全局函數(shù) print 輸出批處理代碼。print 函數(shù)可以接收多個參數(shù),每個參數(shù)都會自動調(diào)用 tostring() 轉(zhuǎn)換為字符串

可以使用 <?=表達(dá)式?> 輸出文本,該代碼的作用類似于 print( 表達(dá)式 ) , 下面的寫法也是允許的

<?
= 表達(dá)式
?>

我們再回到開始,看一下啟動該批處理的 aardio 代碼:

var prcs = process.batch("batbat.aardio",{ exepath = io._exepath; //傳遞命名參數(shù) "批處理啟動參數(shù)1"; //批處理使用 %1 接收第一個參數(shù) "批處理啟動參數(shù)2"; //批處理使用 %2 接收第一個參數(shù)})

process.batch() 用于啟動批處理,第一個參數(shù)指定批處理文件( 或者直接指定批處理代碼也可以 ),后面可以用一個表參數(shù)指定批處理調(diào)用參數(shù):

{ exepath = io._exepath; //傳遞命名參數(shù) "批處理啟動參數(shù)1"; //批處理使用 %1 接收第一個參數(shù) "批處理啟動參數(shù)2"; //批處理使用 %2 接收第一個參數(shù)}

這個批處理表參數(shù)的數(shù)組成員傳遞為批處理的普通參數(shù) —— 可以在批處理中用 %1, %2 等接收對應(yīng)參數(shù):

aardio + bat 批處理混合編程,制作漂亮圖形界面(批處理編程教程)

而表參數(shù)中的名值對成員則傳為 aardio 模板參數(shù),在 "batbat.aardio" 內(nèi)可以用 owner 參數(shù)接收該模板參數(shù),例如該文件內(nèi)可以用 aardio 代碼 owner.exepath 獲取調(diào)用參數(shù) exepth 。

aardio + bat 批處理混合編程,制作漂亮圖形界面(批處理編程教程)

process.batch() 返回一個進(jìn)程管道對象 —— 也就是 process.popen 對象。使用該管道對象可以方便地讀寫批處理進(jìn)程,獲取返回值,退出代碼等等。更多用法請參考標(biāo)準(zhǔn)庫 process.popen 庫函數(shù)文檔。

其實用法很簡單,例如等待批處理執(zhí)行完成,并返回進(jìn)程輸出:

var out,err = prcs.readAll(); //可在參數(shù) @1 中指定匹配模式查找指定字符串

返回值 out 用于接收批處理的輸出( 包含錯誤輸出 ),返回值 err 用于接收批處理的錯誤輸出。批處理調(diào)用" EXIT /B 數(shù)值"即可指定退出代碼。

二、aardio 與批處理簡單對比

本節(jié)提到的所有源碼來自 aardio 自帶范例:

aardio + bat 批處理混合編程,制作漂亮圖形界面(批處理編程教程)

下面是一個 aardio 調(diào)用批處理 for 語句的示例:

import consoleimport process.batch;//批處理 for 遍歷并拆分字符串var bat = process.batch(`@echo off for %%i in (abc,def,xyz) do echo %%i`)console.log( prcs.readAll() )console.pause();

下面我們用純 aardio 代碼實現(xiàn)上面的的功能:循環(huán)遍歷用空格鍵、跳格鍵(tab)、逗號、分號或等號拆分出來的字符串,aardio 代碼如下:

import console; for( line in string.lines("abc,def,xyz","[s,;=]") ){ console.log(line)} console.pause(true);

上面是一個典型的 for 循環(huán)語句。string.lines() 用于創(chuàng)建迭代器,string.lines() 的第 @2 個參數(shù)指定分隔符 —— 支持類正則表達(dá)式的 aardio 模式匹配語法(請參考語法文檔)。注意 aardio 里循環(huán)變量名 line 不需要在前面加%%,也沒有只能使用26個字母的限制。

下面我們再看一個 aardio 調(diào)用批處理 for 語句的例子:

import consoleimport process.batch;//創(chuàng)建一個測試文件,雙引號內(nèi)換行符會解釋為 'n'string.save("/test.txt","abc,def123,456" )//批處理 for 遍歷并按行拆分字符串var bat = process.batch(`@echo off for /f "usebackq delims=, tokens=1,2" %%i in ("test.txt") do echo %%i,%%j`)/*注意文件路徑如果有空格必須包含在引號內(nèi)如果要用引號包含路徑,就必須加上 usebackq,usebackq的意思是用反引號包含命令,單引號包含字符串,然后雙引號就可以包含文件路徑而不是字符串了*/console.log(bat.read(-1)); console.pause()

用純 aardio 代碼這樣寫:

import console//aardio 需要先讀文件到字符串var str = string.load("/test.txt")//參數(shù)@3指定delims,可以用強(qiáng)大的模式匹配語法指定分隔符for tokens in string.lines(str,,",") { /* tokens 是一個數(shù)組,可以用 string.join 任意拼接數(shù)組中指定范圍的元素實現(xiàn)批處理 tokens=n-m 的效果 */ console.log(tokens[1],tokens[2])}console.pause()

其實在 aardio 中還可以 string.each() 實現(xiàn)類似功能,如下:

for a,b in string.each(str,"([^,] ),(. )"){ console.log(a,b)}

再看一個例子,aardio 中調(diào)用 for 語句遍歷文件這樣寫:

import console;import process.batch;//批處理 for 遍歷一個目錄下的所有文件var bat = process.batch(`@for /r "./" %%I in (*) do @echo %%I`)for( all,out,err in bat.each() ){ console.log(all)}console.pause()

改成純 aardio 代碼遍歷文件這樣寫:

import console;/*aardio 遍歷一個目錄下的所有文件*/import fsys;fsys.enum( "/", "*.*", function(dir,filename,fullpath,findData){ if(filename){ console.log("發(fā)現(xiàn)文件:" filename,"完整路徑:" fullpath) } else{ console.log( "發(fā)現(xiàn)目錄:" dir ) } } ,/*如果此參數(shù)為false則忽略子目錄*/);console.pause()

三、執(zhí)行 CMD 命令與進(jìn)程管道操作

如果我們不需要執(zhí)行 bat 批處理。也可以用 process.popen 直接調(diào)用 cmd.exe 創(chuàng)建進(jìn)程管道。注意 process.batch 同樣是基于 process.popen 調(diào)用 cmd.exe ,對進(jìn)程管道的操作是一樣的。

批理執(zhí)行 CMD 命令:

import process.popen//打開命令行,隱藏命令行窗口var prcs = process.popen.cmd(`CD "C:Program Files"C:dir mkdir testrmdir test`)//顯示結(jié)果import win;win.msgbox(prcs.read(-1))

process.popen 創(chuàng)建的進(jìn)程對象不會打開黑窗口,而且可以通過返回的進(jìn)程管道讀寫進(jìn)程標(biāo)準(zhǔn)輸出輸入。當(dāng)然這個方法不僅僅是可以用于 cmd.exe ,也適用于所有控制臺程序。

再看一個讀寫進(jìn)程管道的例子:

import process.popenvar prcs = process.popen("cmd.exe")//如果調(diào)用UTF8編碼的程序,請?zhí)砑酉旅娴木幋a聲明//prcs.codepage = 65001var cmd = /*CD C:C:dir mkdir testrmdir test*/prcs.write(cmd)var result = prcs.peekTo(">");prcs.print('exit')//顯示結(jié)果import console;console.log( result );console.pause("pause");

四、環(huán)境變量

直接看范例:

import win;import process.popen//在父進(jìn)程中指定環(huán)境變量string.setenv("TESTENV","測試變量值");//打開命令行,隱藏命令行窗口var prcs = process.popen.cmd(`echo %TESTENV%`) //也可以在 process 或 process.popen 參數(shù)@3中通過 environment為目標(biāo)進(jìn)程指定環(huán)境變量var prcs = process.popen("cmd.exe","/c echo %TESTENV2%",{ environment = { TESTENV2 = "測試變量值2" }})import fsys.environment;import process.batch;var prcs = process.batch( `@echo offset TESTENV3=測試變量值3<? print( fsys.environment.expand("%appdata%") )?>echo %TESTENV3%`)//顯示結(jié)果import win;win.msgbox(prcs.read(-1))

五、發(fā)送 Ctrl C

直接看范例:

import consoleimport process.popenvar prcs = process.popen("ping 127.0.0.1 -n 10 ")for( all,out,err in prcs.each() ){ console.log( out,err ); prcs.ctrlEvent(0);}console.pause();

六、編寫漂亮的界面

aardio 制作圖形界面很方便,請參考 aardio 開始頁的教程《使用 plus 控件制作精美界面》。下面我們看一下 aardio 制作的一些開源軟件。

通用輸入法狀態(tài)提示工具 ImTip:

aardio + bat 批處理混合編程,制作漂亮圖形界面(批處理編程教程)aardio + bat 批處理混合編程,制作漂亮圖形界面(批處理編程教程)

極簡錄屏工具 Gif123:

aardio + bat 批處理混合編程,制作漂亮圖形界面(批處理編程教程)aardio + bat 批處理混合編程,制作漂亮圖形界面(批處理編程教程)

系統(tǒng)五筆助手 WubiLex:

aardio + bat 批處理混合編程,制作漂亮圖形界面(批處理編程教程)aardio + bat 批處理混合編程,制作漂亮圖形界面(批處理編程教程)aardio + bat 批處理混合編程,制作漂亮圖形界面(批處理編程教程)

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報,一經(jīng)查實,本站將立刻刪除。