在Windows批处理中从for循环获取标记值

iqxoj9l9  于 2023-11-21  发布在  Windows
关注(0)|答案(2)|浏览(124)

我是Windows批处理脚本的新手。试图从文本文件Ignore.txt文件中获取值并将其存储为局部变量。

命令文件:

@Echo off
setlocal enabledelayedexpansion

for /F "tokens=1,2,3" %%i in (Ignore.txt) do (
    echo. %%i
    echo. %%j
    echo. %%k

  set value1=%%i
  set value2=%%j
  set value3=%%k
)

Echo. Value1: !value1!
Echo. Value2: !value2!
Echo. Value3: !value3!

Endlocal

字符串

Ignore.txt:

*.svc
*.jpg
*.png


但结果只打印了一个错误的变量:

输出:

*.svc
 *.jpg
 *.png

 Value1: *.png
 Value2:
 Value3:


如果我在这里做错了什么,请帮助我。还有任何关于检索此信息的更好方法的建议。

vwkv1x7d

vwkv1x7d1#

fortoken选项的帮助包含以下位:

tokens=x,y,m-n  - specifies which tokens from each line are to
                 be passed to the for body for each iteration.

字符串
换句话说,它只会将一行拆分为多个变量,这可以从脚本的运行中得到证明:它输出每一行,但在每一行之间输出空行,其中空的%%j和%%k。
如果你想把这个文件解析成单独的变量,你需要手动跟踪你在哪一行,就像这样:

@Echo off
setlocal enabledelayedexpansion

set _digit=1
for /F %%i in (Ignore.txt) do (
    echo. %%i

    set value!_digit!=%%i
    set /a _digit=!_digit!+1
)

Echo. Value1: !value1!
Echo. Value2: !value2!
Echo. Value3: !value3!

Endlocal

m528fe3b

m528fe3b2#

在你的例子中,主要的困难是FOR循环不知道如何将换行符设置为换行符。所以首先你需要丢弃换行符,比如将文件的所有行收集到一个带有特定换行符的文本变量中。之后就可以获得几个变量的值。

SETLOCAL EnableDelayedExpansion

:: Catenate all file lines in the same variable separated by %del%
SET "text="
SET "del=~"
FOR /F %%a IN (Ignore.txt) DO (SET "text=!text!%del%%%a")
ECHO %text%

:: obtain the values of several variables.
FOR /F "delims=%del% tokens=1-6" %%i IN ("%text%") DO (
  echo. %%i
  echo. %%j
  echo. %%k

  set value1=%%i
  set value2=%%j
  set value3=%%k
)
Echo. Value1: !value1!
Echo. Value2: !value2!
Echo. Value3: !value3!

字符串

输出

*.svc
 *.jpg
 *.png
 Value1: *.svc
 Value2: *.jpg
 Value3: *.png

相关问题