開發的遊戲專案,需要乙個工具,對指定的資源進行複製、加密,然後打包。之前打包時都手工操作,複製與加密這二步分別寫了幾個工具(lua加密與資源加密是分開的),後來感覺bat操作路徑特別麻煩,所以我改用了hta寫了乙個介面,讓使用者可以輸入版本號,控制台上顯示程式執行狀態…
寫到的過程中,遇到幾個坑,一併在這裡記錄下來。
遍歷乙個目錄,並在另外乙個目錄建立相同的目錄檔案
這裡主要在於使用了「enabledelayedexpansion」 (延遲環境變數擴充套件),為什麼要使用它呢?看下面的乙個示例:
@echo off上面的**執行後會輸出5個空行,有人可能會問,不是把變數%%i賦值給var變數了嗎?在這裡如果想達到預期的目的,就需要使用「enabledelayedexpansion」了for /l %%i in (1,1,5) do (
set var=%%i
echo %var%
)
@echo off在開啟「enabledelayedexpansion」中,使用!!來替換%%進行操作setlocal enabledelayedexpansion
for /l %%i in (1,1,5) do (
set var=%%i
echo !var!
)endlocal
字串替換的語法:%var:str1=str2%,將字串var中所有的str替換為str2
所以上面的=!relativepath:%src_dir%=!就容易理解了吧
bat中呼叫應用程式
start ["title"] [/dpath] [/i] [/min] [/max] [/wait] [/b] [filename] [parameters]
start luac.exe –o path1 path2
這個其實沒有什麼難度,方法也十分簡單
var wsh = new activexobject("wscript.shell");
var rs = wsh.run(「d:\xx\xx.bat param1 param2」, 0, true);
wscript.shell 提供對本地window外殼程式的訪問,它擁有3個屬性及11個方法。
屬性:currentdirectory、environment、specialfolders
方法:hta呼叫bat使用的就是run方法,這裡重點介紹一下run方法
object.run(strcommand, [intwindowstyle], [bwaitonreturn])引數
object
wshshell 物件。
strcommand
表示要執行的命令列的字串值。必須包括要傳遞到可執行檔案的所有引數。
intwindowstyle
可選。表示程式視窗外觀的整數值。請注意,並非所有程式都使用此資訊。
bwaitonreturn
可選。布林值,表示在繼續執行指令碼中的下一條語句之前,指令碼是否等待執行完程式。如果設為 true,則在執行完程式後才執行指令碼,run 方法返回由程式返回的任何錯誤**。如果設為 false(預設值),則 run 方法將自動在啟動程式後立即返回 0(不是錯誤**)。
run 方法返回乙個整數。run 方法啟動在新 windows 程序中執行的程式。可以讓指令碼等到程式執行完後再繼續執行。這允許您同步執行指令碼和程式。strcommand 引數內的環境變數自動擴充套件。如果某個檔案型別已正確註冊到某個程式中,則對該型別的檔案呼叫 run 方法時將執行該程式。例如,如果您的計算機系統中裝有 word,則對 *.doc 檔案呼叫 run 方法時將啟動 word 並載入該文件。下表列出了 intwindowstyle 的可用設定。
在呼叫bat的時候可以傳遞引數,上面的param1、param2就是傳入的引數,在bat中通過%1、%2..%n進行獲取。
只是如果傳入的引數是路徑,必須是「\」而不能為「/」,否則某些應用程式在讀取路徑時會找不到路徑,導致程式執行失敗。
通過wscript.shell物件獲取應用程式的執行目錄,例如現在想獲得winrar的應用程式目錄:
rarpath = wsh.regread("hkey_classes_root\\winrar\\shell\\open\\command\\").match(/"([^"]*)"/)[1];
呼叫run方法便可以呼叫它了
winrar常用的引數:
a 新增檔案到壓縮檔案
-r 包含子資料夾
-ep1 將需要打包的資料夾目錄包含進去,-ep不包含
-inul 禁用所有訊息
-df 壓縮後刪除檔案
m<0..5> 設定壓縮級別(0-儲存...3-預設...5-最大)
-x 排除指定的檔案
x@《列表》 排除指定列表檔案中的檔案
n《檔案》 僅包含指定的檔案
n@ 從標準輸入裝置讀取檔名到包括
n@《列表》 在指定的檔案列表包括檔案
例:僅打包該目錄下的*.xml檔案 「winrar.exe a -ep -m5 -inul -n*.xml」
在VB中呼叫Windows API的注意事項
visual basic vb 作為一種高效程式設計環境,它封裝了部分windows api函式,但也犧牲了一些api的功能。呼叫api時稍有不慎就可能導致api程式設計錯誤,出現難於捕獲或間歇性錯誤,甚至出現程式崩潰。要減少api程式設計錯誤,提高vb呼叫api時的安全性,應重點注意下列八個問題 ...
vbs和bat那些事
vbs介紹 vbs是一種windows指令碼,全稱是 microsoft visual basic scriptedition.vbs是visualbasic的的乙個抽象子集,是系統內建的,用它編寫的指令碼 不能編譯成二進位制檔案,直接由windows系統執行 實際是乙個叫做宿主host的解釋源 並...
BAT檔案的呼叫
分成2個步驟,首先生成乙個bat檔案,然後呼叫批處理檔案 1.生成.bat檔案 入參為檔案的內容,filepath為絕對路徑,且需要副檔名 這個方法不侷限於生成.bat檔案,也可以生成其他副檔名檔案 public void writebatfile stringfilecontent else 2....