2012-02-25 73 views
3

我有以下數據如何從批處理文件中的txt文件創建數組?

aaaa 1000 2000 
bbb 3000 4000 
cccc 5000 
ddd 6000 7000 8000 

在這個文件中的行數不固定一個txt文件。

我需要數組中每行的第一個標記並打印每個元素。

+1

一個Windows/DOS批處理文件甚至可以*數組?我的意思是,我想象一個PowerShell腳本可以做到這一點,但CMD? – cHao 2012-02-25 22:32:08

+0

@cHao下面的鏈接給出了關於批處理文件中的數組的一些提示,但我無法理解太多 [http://jakash3.wordpress.com/2009/12/18/arrays-in-batch/] [http ://www.robvanderwoude.com/battech_array.php] – NewQueries 2012-02-26 00:02:32

+1

我不明白爲什麼有人認爲上面的cHao的評論是一個很好的評論;它只是顯示他對CMD批量功能的無知! ;) – Aacini 2012-02-26 03:40:34

回答

12

創建陣列:

setlocal EnableDelayedExpansion 

set i=0 
for /F %%a in (theFile.txt) do (
    set /A i+=1 
    set array[!i!]=%%a 
) 
set n=%i% 

要打印數組元素:

for /L %%i in (1,1,%n%) do echo !array[%%i]! 

如果你想通過數組名和lenght作爲子程序參數,然後用這種方式:

call theSub array %n% 

:theSub arrayName arrayLen 
for /L %%i in (1,1,%2) do echo !%1[%%i]! 
exit /B 
+0

謝謝@Aacini我會在我的程序中試試這個! – NewQueries 2012-02-26 18:12:36

2

試試這個:

@echo off 
for /F "tokens=1,2*" %%x in (myFile.txt) do echo %%x 

%需要在批處理文件中使用,但你可以測試它與單% S中的CMD線。

簡而言之,for將迭代myFile.txt使用默認分隔符(空格)將每行分隔爲兩個標記。

+0

謝謝@akf,但我需要創建一個數組並將其傳遞到另一個子例程,我可以單獨獲取它的每個元素。 – NewQueries 2012-02-25 23:53:23

0

嘗試此操作並從任何地方調用它

@echo off 

for /f "usebackq" %%a in ('%2') do set d=%%~a 
for /f "usebackq tokens=* delims=%d%" %%G in ('%3') do set %1=%%~G 

set /a i=-1 


for %%h in (!%1!) do (
set /a i+=1 
set %1[!i!]=%%h 
) 
+3

雖然這可能是一個答案,它似乎與其他較舊的答案非常相似。當回答一個已經有一個被接受的答案的老問題時,你需要添加重要的額外新信息並解釋爲什麼你的新答案是有用的。 – AdrianHHH 2015-07-19 15:11:22