如何解析文本文件以在批处理脚本中加载数组

问题描述 投票:0回答:1

如果我有这个文本文件keys.txt:

key1=val 1
key2=val 2
key3=val 3

我可以使用这个脚本来加载这个脚本来加载值:

@echo off
setlocal

for /f "usebackq tokens=1* delims==" %%I in ("keys.txt") do (
    set "%%~I=%%~J"
)

set key

输出为:

key1=val 1
key2=val 2
key3=val 3

但是,我正在尝试将以下具有已知名称的列表值加载到批处理脚本中的数组中:

;files array
files=filename1
files=filename2
...
files=filename_n
;folders array 
folders=foldername1
folders=foldername2
... 
folders=foldername_n
;sources array 
sources=value1
sources=vakue2
... 
sources=vakue_n
;other key value pairs
do_copy=yes
messagePromot=Are you sure?

我希望批处理脚本通过解析上面的文本文件在批处理脚本中创建 3 个数组。结果数组将是:

files[0]=filename1
files[1]=filename2
...
files[n]=filename_n

folders[0]=foldername1
folders[1]=foldername2
...
folders[n]=foldername_n

sources[0]=value1
sources[1]=value2
...
sources[n]=value_n

do_copy=yes
messagePrompt=Are you sure? 

假设数组变量是已知的或可预测的,我如何编写批处理脚本来解析这样的文本文件?

arrays windows parsing batch-file
1个回答
0
投票
@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION
rem The following settings for the directory and filename are names
rem that I use for testing and deliberately include spaces to make sure
rem that the process works using such names. These will need to be changed to suit your situation.

SET "sourcedir=u:\your files"
SET "filename1=%sourcedir%\q77561414.txt"

:: remove variables starting count_
FOR  /F "delims==" %%e In ('set count_ 2^>Nul') DO SET "%%e="

FOR /f "usebackqtokens=1*delims==" %%b IN ("%filename1%") DO (
 IF "%%c" neq "" (
  IF DEFINED count_%%b (SET /a count_%%b+=1) ELSE (SET /a count_%%b=0)
  SET "%%b[!count_%%b!]=%%c"
 )
)
SET count
SET |FIND "["

GOTO :EOF

请注意,如果文件名不包含空格等分隔符,则

usebackq
%filename1%
周围的引号都可以省略。

您需要更改分配给

sourcedir
的值以适合您的情况。该列表使用适合我的系统的设置。

我使用了一个名为

q77561414.txt
的文件,其中包含您的测试数据。

注意使用 DELAYEDEXPANSION 来访问

count
变量的值。

你还没说要做什么

other key value pairs
,所以我只是处理它们...

count
从 0 开始。

© www.soinside.com 2019 - 2024. All rights reserved.