从 Windows Batch 中的 for 循环获取令牌值

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

我是 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

忽略.txt:

*.svc
*.jpg
*.png

但是结果只打印了一个变量,太错误了:

输出:

 *.svc
 *.jpg
 *.png

 Value1: *.png
 Value2:
 Value3:

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

windows batch-file for-loop cmd
2个回答
1
投票

for
token
选项的帮助包含以下内容:

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

0
投票
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%

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
© www.soinside.com 2019 - 2024. All rights reserved.