如果我有这个文本文件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?
假设数组变量是已知的或可预测的,我如何编写批处理脚本来解析这样的文本文件?
@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 开始。