在批处理文件中打印数组元素值

时间:2014-12-18 09:54:39

标签: windows batch-file locale

在以下代码中打印数组元素值时出现问题:

@echo off 
setlocal enabledelayedexpansion enableextensions
for /F "tokens=2,3 delims= " %%a in ('findstr "associationMaxRtx maxIncomingStream maxOutgoingStream initialAdRecWin maxUserdataSize mBuffer nThreshold PathMaxRtx maxInitialRtrAtt minimumRto maximumRto initialRto rtoAlphaIndex tSack" C:\Users\ephajin\logs.txt') do (
     set /A count+=1
     set vartmp1=%%a
     set vartmp2=%%b
     set "array[!count!]="%%a %%b""
)



(for /L %%i in (1,1,%count%) do  echo !array[%%i]!
) > result.txt

在结果文件中我得到了输出

ECHO is off.
ECHO is off.
ECHO is off.
ECHO is off.

它不会打印数组值。

问题可能是由于setlocal enabledelayedexpansion,但你如何纠正呢?

1 个答案:

答案 0 :(得分:1)

FOR /L %%a IN (1,1,4) DO ECHO !array[%%a]!

FOR /f "tokens=1*delims==" %%a  IN ('set array[') DO ECHO %%b

这两行中的任何一行都应该显示您的要求。

由于第一个代码与您的代码相同,我怀疑array[*]数组未正确建立。你可以通过执行

来检查
set array[

准确显示已设定的内容。实际上,

set

应该显示所有已定义的用户变量。

set|more

会显示相同的内容,但允许您翻阅它们。

SET "result="
FOR /f "tokens=1*delims==" %%a  IN ('set array[') DO SET "result=!result! %%b"
ECHO result: "%result%" or "%result:~1%"
echo===============
SET "result="
FOR /L %%a IN (1,1,4) DO SET "result=!result! !array[%%a]!"
ECHO result: "%result%" or "%result:~1%"

设置result的两种方法 - 数组中的值列表。当然,set指令中的空间几乎可以是你想要的任何字符 - 例如逗号。结果显示前导空格并删除该空格。