[問題]請問一下這個批次檔的區塊要怎麼解讀

MS Windows 系列都可以在這邊討論.

版主: E-Office小組

分享到: Facebook

[問題]請問一下這個批次檔的區塊要怎麼解讀

文章mtyjl » 週三 7月 07, 2010 7:36 pm


大家好
不知道有沒有路過這裡, 懂批次檔的人可以教我一下呢?

這是一個批次檔的區域, 可是我不曉得邏輯要如何解釋, 主要原因是doublequote實在太多層了 = =

第一個問題是想麻煩大家幫我解讀一下這個區域的邏輯
rem Get remaining unshifted command line arguments and save them in the
set CMD_LINE_ARGS=
:setArgs
if ""%1""=="""" goto doneSetArgs
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
shift
goto setArgs
:doneSetArgs

rem是註解, set是設定系統環境變數, :setArgs是goto這個指令的連結位置, 有點類似method的用途
%1代表的是這個批次檔的第一個變數, shift是指處理變數的%1~%9都指向下一個變數,
而:setArgs和goto setArgs所包住的區域是類似迴圈的結構
可是.....組合在一起就看不懂了.....Orz
我看不懂他讓迴圈跑下去的判斷邏輯....

第二個問題想請問一下, 批次檔%1~%9所判定的變數, 到底是如何決定的呢?
好像跟doublequote有關, 可是實驗一下又測不出什麼來, 批次檔到底是什麼時候決定了變數的呢?
可能我沒google對地方吧, 很多文章都只是指令表分享, 沒有進一步的撰寫教學

第三個問題是想請問這行批次檔:
call "%EXECUTABLE%" stop %CMD_LINE_ARGS%
call是windows指令裡面用來呼叫其他批次檔的, 可是查了網路上常見的指令表, 並沒說它可以填入參數啊 >.<
從stop開始包含後面共兩個字串, 究竟是怎麼來的呢? 輸入help, 指令表裡面沒有stop啊~
已知%EXECUTABLE%是另外一個批次檔的檔案路徑, 把它打開來卻看不出個所以然,
請問後面的參數是批次檔裡面的函式嗎? 還是call其實是可以輸入參數的呢?
是不是有點類似String[] args那樣呢?

謝謝大家幫忙囉~
如果到時能看懂高手們的作品, 很樂意來分享給大家, 謝謝
mtyjl
漸有心得的高中生
 
文章: 136
註冊時間: 週六 9月 13, 2008 2:05 pm

Re: [問題]請問一下這個批次檔的區塊要怎麼解讀

文章b80203 » 週四 7月 08, 2010 12:05 am

mtyjl 寫:
大家好
不知道有沒有路過這裡, 懂批次檔的人可以教我一下呢?

這是一個批次檔的區域, 可是我不曉得邏輯要如何解釋, 主要原因是doublequote實在太多層了 = =

第一個問題是想麻煩大家幫我解讀一下這個區域的邏輯
rem Get remaining unshifted command line arguments and save them in the
set CMD_LINE_ARGS=
:setArgs
if ""%1""=="""" goto doneSetArgs
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
shift
goto setArgs
:doneSetArgs

rem是註解, set是設定系統環境變數, :setArgs是goto這個指令的連結位置, 有點類似method的用途
%1代表的是這個批次檔的第一個變數, shift是指處理變數的%1~%9都指向下一個變數,
而:setArgs和goto setArgs所包住的區域是類似迴圈的結構
可是.....組合在一起就看不懂了.....Orz
我看不懂他讓迴圈跑下去的判斷邏輯....

第二個問題想請問一下, 批次檔%1~%9所判定的變數, 到底是如何決定的呢?
好像跟doublequote有關, 可是實驗一下又測不出什麼來, 批次檔到底是什麼時候決定了變數的呢?
可能我沒google對地方吧, 很多文章都只是指令表分享, 沒有進一步的撰寫教學

第三個問題是想請問這行批次檔:
call "%EXECUTABLE%" stop %CMD_LINE_ARGS%
call是windows指令裡面用來呼叫其他批次檔的, 可是查了網路上常見的指令表, 並沒說它可以填入參數啊 >.<
從stop開始包含後面共兩個字串, 究竟是怎麼來的呢? 輸入help, 指令表裡面沒有stop啊~
已知%EXECUTABLE%是另外一個批次檔的檔案路徑, 把它打開來卻看不出個所以然,
請問後面的參數是批次檔裡面的函式嗎? 還是call其實是可以輸入參數的呢?
是不是有點類似String[] args那樣呢?

謝謝大家幫忙囉~
如果到時能看懂高手們的作品, 很樂意來分享給大家, 謝謝


代碼: 選擇全部
set CMD_LINE_ARGS=

建立CMD_LINE_ARGS變數,並將它設為空

代碼: 選擇全部
:setArgs

區塊setArgs開始(無結束符號)

代碼: 選擇全部
if ""%1""=="""" goto doneSetArgs

若檔名後面有引數,若引數是空的了,就跳到doneSetArgs區塊
(當然這裡第一次跑的時候,是指第一個引數,shift後會變成第二個,
若第二個就沒了,就跳到doneSetArgs區塊囉!!)

代碼: 選擇全部
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1

將目前指的這個引數加上原本CMD_LINE_ARGS變數裡的東東
ex:
CMD_LINE_ARGS = aaa好了
%1 = bbb

經過這條指令後,CMD_LINE_ARGS就變成
aaa bbb

代碼: 選擇全部
shift

將%1指向的引數index++
ex:
parameter[9]
index = 0
經過這行後
index = 1,也就是取出parameter[1]

代碼: 選擇全部
goto setArgs

回到setArgs區塊的開始,再做一次囉

代碼: 選擇全部
:doneSetArgs

區塊setArgs開始(無結束符號)

整體來說,這個程式結束後,在最後一行加上echo %CMD_LINE_ARGS
就會出現你執行這個batch file的引數(參數)囉!!

代碼: 選擇全部
call "%EXECUTABLE%" stop %CMD_LINE_ARGS%

這一行我試了一下,其實意思是指
幫我呼叫某某程式,後面全是它的引數!!
例如呼叫的file.bat好了
那這一行就會是(引數用上面的範例)
代碼: 選擇全部
call file.bat stop aaa bbb

也就換成
代碼: 選擇全部
file.bat stop aaa bbb

它有三個引數
1. stop
2. aaa
3. bbb

其實這是生平第一次看windows的batch file!!(只學過linux的)
不過其實語法各家都差不多!!當你玩過script language後!!
ex: tcl, python
有錯的話,請大家不吝指教!!^^
b80203
資管系課程助教
 
文章: 189
註冊時間: 週日 10月 01, 2006 7:33 pm
來自: fju im & pe

Re: [問題]請問一下這個批次檔的區塊要怎麼解讀

文章XO » 週五 7月 09, 2010 8:13 pm

mtyjl 寫:可能我沒google對地方吧, 很多文章都只是指令表分享, 沒有進一步的撰寫教學


試試 Googling 「dos batch file 教學」可以看到一些中文教學
dos batch file tutorial」則可以有較為寬廣的英文資源。

我遇到新東東時,通常就以該「陌生名詞」加上 Tutorial 去 Google 廟求神問卜...
通常都可以無師自通... 這就是 Tutorial 的目的!不是嗎?

思豪!厲害唷!又熱心!真好! Keep the good work.
通常「既已予人己愈多」... 我真心這麼認為啦!

寫作是學習成長很重要的一環... 寫作/發表有重組「新知」的效果...

下面這一篇蠻值得閱讀的:
[精華] Joel 給電腦系學生的建議
eXtra Old 的是我「不是酒」哦!
제 이름은 오조휘 입니다

臉書裡依舊是 Extra.Old: http://www.facebook.com/extra.old
頭像
XO
資管系教師
 
文章: 5307
註冊時間: 週二 4月 27, 2004 12:20 pm
來自: CQ Inc.

Re:[問題]請問一下這個批次檔的區塊要怎麼解讀

文章Itemx » 週二 7月 13, 2010 5:45 pm

call
start

這兩個指令其實滿好用的, 尤其是像我維護某些裝置的時候需要同時up好幾個Application, 用以上指令一口氣呼叫完, 也比我一個一個click方便許多

更重要的是, 要請其他人協助的時候, 1-step總是較好說明的

command的話, windows通常可以在指令後面加上 /? 例如

call /?
start /?

這些都可以幫你獲得解答
Connecting .................. [ OK ]
User Identify .................. [ Itemx ]
Also Locate a blog: [FLAK #0 Active Log]
頭像
Itemx
站長群
 
文章: 660
註冊時間: 週四 3月 25, 2004 1:06 am
來自: FLAK第三憐合回線

Re:[問題]請問一下這個批次檔的區塊要怎麼解讀

文章XO » 週二 7月 13, 2010 11:26 pm

Wow 希客!
老站長耶... ^o^ 要常來啦!
看看可不可以協助學弟妹,來把這 phpbb 升個級ㄇㄟ! ;-)
eXtra Old 的是我「不是酒」哦!
제 이름은 오조휘 입니다

臉書裡依舊是 Extra.Old: http://www.facebook.com/extra.old
頭像
XO
資管系教師
 
文章: 5307
註冊時間: 週二 4月 27, 2004 12:20 pm
來自: CQ Inc.

Re:[問題]請問一下這個批次檔的區塊要怎麼解讀

文章mtyjl » 週四 7月 15, 2010 5:38 pm

謝謝大家幫忙 總算有點概念了

Itemx 寫:這兩個指令其實滿好用的, 尤其是像我維護某些裝置的時候需要同時up好幾個Application, 用以上指令一口氣呼叫完, 也比我一個一個click方便許多

更重要的是, 要請其他人協助的時候, 1-step總是較好說明的


現在打工的地方也是用指令跑程式, 不過是用來更新windows patch

但有些Office的更新檔, 執行之後會詢問是否要更新並同意授權,
順更想請問這些過程有指令可以直接幫我代入選項嗎?
mtyjl
漸有心得的高中生
 
文章: 136
註冊時間: 週六 9月 13, 2008 2:05 pm


回到 Windows 討論版

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客

cron