2013-11-14 30 views
1

這個有點難以解釋,但我會盡我所能。在批處理文件中訪問未知數量的命令(參數)

我傳遞目錄的列表到一個批處理文件經由一個字符串數組,這是在Java中創建,然後通入用調用Runtime.getRuntime的.BAT()。EXEC(命令)。我遇到的麻煩是訪問命令數組,其大小可能因執行而異。例如,在一次運行期間,「命令」可能包含以下內容:

{「cmd.exe」,「/ C」,「Start」,「program.bat」,「stringA」,「stringB」,「 stringC「}

前四個元素用來調用該批處理文件,所以只有串A,B,和C被傳遞到批文件(program.bat)作爲參數。但是,在下一次運行中,「命令」可能如下所示:

{「cmd.exe」,「/ C」,「Start」,「program.bat」,「stringA」,「stringB」,「 stringC」,STRING天,stringE}

正如你可以看到,有兩個多個字符串添加到參數表。我的問題是這樣的:在我的批處理文件,我有這樣的:

::Get stringA (param 1) 
set stringA=%1 
::Get stringB (param 2) 
set stringB=%2 
::Get stringC (param 3) 
set stringC=%3 

這需要三個字符串參數(從最初的「命令」陣列),並設置爲任何數值將相應的參數傳遞局部變量。我想知道是否有辦法從批處理文件中確定參數的數量(例如,從第二個「commands」數組中),並相應地設置/創建適當數量的局部變量。我主要關注Java,所以批處理文件對我來說還是比較新的。任何建議都將非常感謝,因爲我一直試圖找出一段時間,我自己沒有成功。

+1

你可能想看看['SHIFT'命令(http://ss64.com/nt/shift.html)。 –

回答

2

如這裏指出:

https://stackoverflow.com/a/14298769/955143

您可以通過1%讀%9,並使用SHIFT從數組中刪除第一個元素,一個則renummerate他們到新的號碼。

例如,2%變爲%1,和第10元素變爲9日,您可以通過9%,接取它。

由於讀值成爲一個空字符串,你已經達到了陣列

你可以寫一個循環(被goto或)年底Reade的%1的值,並使用SHIFT旋轉第二個元素到第一個位置,並檢查它是否不是空的,他們重複這個過程。

+0

我想這正是我所需要的,這導致我有更多的問題 - 在循環中,我將不得不創建一個變量並將其設置爲當前值。我不確定每次通過循環時如何創建一個不同的,唯一的變量。 – DerStrom8

+0

歡迎來到SO。請問自己的後續問題,單獨提問。 – RBerteig

+0

@RBerteig好的,對不起。我會記住下次。 – DerStrom8

1
@echo off 
setlocal enabledelayedexpansion 

set argCount=0 
for %%x in (%*) do (
    set /A argCount+=1 
    set "argVec[!argCount!]=%%~x" 
) 

echo Number of processed arguments: %argCount% 

for /L %%i in (1,1,%argCount%) do echo %%i- "!argVec[%%i]!" 

例如:

C:> test One "This is | the & second one" Third 
Number of processed arguments: 3 
1- "One" 
2- "This is | the & second one" 
3- "Third" 

Batch-Script - Iterate through arguments

+0

謝謝,這正是我正在尋找的。我不知道有一種方法可以在批處理文件中創建數組,儘管回頭看我應該知道這是可能的。 – DerStrom8

+0

偉大的答案@Aacini我想讓我的回答更好,但我正在通勤到我的房子,所以我無法改善我的答案。現在,我沒有改進它讓我感覺更開心,所以我有機會學習更多,並且看到很棒且組織良好的代碼。謝謝! – Rafareino