jscript調用bat注意事項

開發的遊戲項目,需要一個工具,對指定的資源進行復制、加密,然後打包。之前打包時都手工操作,複製與加密這二步分別寫了幾個工具(lua加密與圖片資源加密是分開的),後來感覺bat操作路徑特別麻煩,所以我改用了hta寫了一個界面,讓使用者可以輸入版本號,控制檯上顯示程序運行狀態…

寫到的過程中,遇到幾個坑,一併在這裏記錄下來。

===============================================

bat

遍歷一個目錄,並在另外一個目錄創建相同的目錄文件

cd /d %src_dir%
setlocal EnableDelayedExpansion
for /r /d %%i in (%src_dir%) do (
    set relativePath=%%i
    set relativePath=!relativePath:%src_dir%=!
    set targetFullPath=%target_dir%!relativePath! 

    if exist !targetFullPath! rd /s /q !targetFullPath!
    mkdir !targetFullPath!
)
endlocal

這裏主要在於使用了“EnableDelayedExpansion” (延遲環境變量擴展),爲什麼要使用它呢?看下面的一個示例:

@echo off 
for /l %%i in (1,1,5) do ( 
    set var=%%i 
    echo %var% 
)

上面的代碼執行後會輸出5個空行,有人可能會問,不是把變量%%i賦值給var變量了嗎?在這裏如果想達到預期的目的,就需要使用“EnableDelayedExpansion”了

@echo off 
setlocal ENABLEDELAYEDEXPANSION 
for /l %%i in (1,1,5) do ( 
    set var=%%i 
    echo !var! 
)
endlocal

在開啓“EnableDelayedExpansion”中,使用!!來替換%%進行操作

字符串替換的語法:%var:str1=str2%,將字符串var中所有的str替換爲str2

所以上面的=!relativePath:%src_dir%=!就容易理解了吧

bat中調用應用程序

start ["title"] [/dPath] [/i] [/min] [/max] [{/separate | /shared}] [{/low | /normal | /high | /realtime | /abovenormal | belownormal}] [/wait] [/b] [FileName] [parameters]

start luac.exe –o path1 path2

hta調用bat

這個其實沒有什麼難度,方法也十分簡單

var wsh = new ActiveXObject("WScript.Shell");

var rs = wsh.Run(“d:\xx\xx.bat param1 param2”, 0, true);

WScript.Shell 提供對本地Window外殼程序的訪問,它擁有3個屬性及11個方法。

屬性:CurrentDirectoryEnvironmentSpecialFolders

方法:

AppActivate、CreateShortcut、ExpandEnvironmentStrings、LogEvent、Popup、RegDelete、RegRead、RegRead、RegWrite、Run、SendKeys、Exec

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”

===============================================

如果想深入學習和了解bat,建議下載Visual Bat軟件進行學習,內置chm幫助文檔

hat,建議下載HtaEdit進行學習

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章